2017-02-03 2 views
1

J'ai eu du mal à ajouter une saisie semi-automatique aux champs django admin fk, je suis tombé sur cette application tierce, Django-autocomplete-light, mais son Les docs sont très déroutants pour les débutants comme moi. Donc, j'ai mon modèle, et comment pourrais-je ajouter une saisie semi-automatique pour les champs fk.Comment utiliser Django-autocomplete-light pour la clé étrangère dans l'admin

Class Order(models.Models) 
    Client = models.ForeignKey(settings.AUTH_USER_MODEL) 

Répondre

1

Vous devriez jeter un oeil à la documentation et essayer de le lire lentement. Si vous donnez plus de détails sur ce qui ne fonctionne pas pour vous, nous pourrions peut-être mieux vous aider. En général, voici ce qui est nécessaire:

Dans votre views.py fichier ajouter

from django.contrib.auth.models import User 
from dal import autocomplete 
from your_countries_app.models import Country 


class ClientAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 
     # Don't forget to filter out results depending on the visitor ! 
     if not self.request.user.is_authenticated(): 
      return User.objects.none() 

     qs = User.objects.all() 

     if self.q: 
      qs = qs.filter(name__istartswith=self.q) 

     return qs 

Puis dans votre urls.py add fichier:

from your_countries_app.views import ClientAutocomplete 

urlpatterns = [ 
    url(
     r'^client-autocomplete/$', 
     ClientAutocomplete.as_view(), 
     name='client-autocomplete', 
    ), 
] 

Sautons pour une seconde la partie avec le shell de la documentation, si cela vous déroute. Alors maintenant, vous devriez être en mesure d'aller à cette adresse depuis votre navigateur.

localhost: 8000/client-autocomplete/

Vous devriez être en mesure de voir tous les utilisateurs sous forme de texte, il (ce format est appelé JSON, vous pouvez regarder vers le haut, si vous voulez, mais nous ne traitera pas avec). Si vous avez créé une autre application pour les commandes, et que vous travaillez dans un autre dossier, juste essayer d'appeler l'URL avec les commandes comme préfixe à la place:

localhost: 8000/commandes/client-autocomplete/

Browser view

Je suppose que vous êtes familiarisé avec les formes de Django, sinon take a look here. dans votre forms.py ajouter ceci:

from dal import autocomplete 
from django.contrib.auth.models import 
from django import forms 


    class OrderForm(forms.ModelForm): 
     client = forms.ModelChoiceField(
      queryset=User.objects.all(), 
      widget=autocomplete.ModelSelect2(url='cllient-autocomplete') 
      # if you are working in an orders application, and you have defined the the url 
      #in the orders/urls.py then call this method like this: 
      #widget=autocomplete.ModelSelect2(url='orders:cllient-autocomplete') 

     ) 

     class Meta: 
      model = Order 
      fields = ('__all__') 

Je suppose que vous voulez que la saisie semi-automatique fonctionne en dehors des vues du panneau d'administration, vous devez donc ajouter le code ci-dessous à votre modèle pour la vue des commandes. Veuillez noter que vous devriez avoir dans votre base.html le {% block content%} et le {% block footer%} définis:

{% extends 'base.html' %} 
{# Don't forget that one ! #} 
{% load static %} 

{% block content %} 

<div> 
    <form action="" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" /> 
    </form> 
</div> 
{% endblock %} 

{% block footer %} 
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script> 

{{ form.media }} 
{% endblock %}