2016-05-13 5 views
2

Ich habe http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html#using-autocompletes-outside-the-adminmit django-Autocomplete-Licht außerhalb Admin Ansicht

gelesen und versuchte, das Widget in einer einfachen HTML-Seite zu verwenden, aber es funktioniert nicht und es gibt keine JavaScript oder Python Fehler. Hier ist mein Code:

# models.py 
class Doctor(models.Model): 
    name = models.CharField(max_length=200) 
    address = models.CharField(max_length=200, null=True, blank=True, default='') 
    def __unicode__(self): 
     return self.name 

class Patient(models.Model): 
    name = models.CharField(max_length=200) 
    sample = models.OneToOneField(Sample, null=True, blank=True) 
    doctor = models.ForeignKey(Doctor, null=True, blank=True, default=None) 
    def __unicode__(self): 
     return self.name 

# views.py 
class DoctorAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 
     if not self.request.user.is_authenticated(): 
      return Doctor.objects.none() 

     qs = Doctor.objects.all() 
     if self.q: 
      qs = qs.filter(name__icontains=self.q) 

     return qs 


class DocForm(autocomplete.FutureModelForm): 
    class Meta: 
     model = Doctor 
     fields = ('name',) 
     widgets = { 
      'doctor': autocomplete.ModelSelect2(url='doc-autocomplete'), 
     } 

class Index(generic.UpdateView): 
    model = Doctor 
    form_class = DocForm 
    template_name = 'index.html' 
    success_url = reverse_lazy('index') 

    def get_object(self): 
     return Doctor.objects.first() 


# index.html 
<html> 
<head> 
<script type="text/javascript" src="/static/admin/js/jquery.js"></script> 
</head> 
<body> 
Welcome 
    <div> 
     <form action="" method="post"> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit" /> 
     </form> 
    </div> 
</body> 
</html> 

Alles, was ich will, ist ihr schönes select2 Widget verwenden Arzt Namen mit Arzt ids als Werte in einer der automatischen Vervollständigung aufzulisten. Ich kann es ohne django-autocomplete-light machen, aber ich möchte explizit lernen, wie man es mit ihrem Widget macht, das schöner aussieht. Kann mir bitte jemand helfen, damit es funktioniert?

Antwort

0

ich es bekommen habe:

class PatForm(autocomplete.FutureModelForm): 
    class Meta: 
     model = Patient 
     fields = ('doctor',) 
     widgets = { 
      'doctor': autocomplete.ModelSelect2Multiple(url='doc-autocomplete'), 
     } 

class Index(generic.UpdateView): 
    model = Patient 
    form_class = PatForm 
    template_name = 'index.html' 
    success_url = reverse_lazy('index') 

    def get_object(self): 
     return Doctor.objects.first() 

, die produziert:

enter image description here

Wenn Sie ModelSelect2Multiple durch ModelSelect2 ersetzen, dann erhalten Sie: enter image description here

+0

Ich bin froh, dass du es gelöst hast. Ich werde das Versehen im relevanten Teil meiner Antwort korrigieren, danke! – raratiru

1

aktualisieren

Sie sollten int das Patient Modell anstelle des Doctor Modell das Widget des 'doctor' Attribut außer Kraft setzen:

class DocForm(autocomplete.FutureModelForm): 
    class Meta: 
     model = Patient 
     fields = ('doctor',) # or ('__all__') 
     widgets = { 
      'doctor': autocomplete.ModelSelect2(url='doc-autocomplete'), 
     } 

Stellen Sie außerdem sicher, dass die reverse('doc-autocomplete') url Besuch der erwarteten Ergebnisse gibt für den angemeldeten Benutzer, wie in der autocomplete tutorial.


erläutert

Bei dem Versuch, ein ähnliches Problem zu lösen, fand ich heraus, dass ich {{ form.media }} in meiner Vorlage nicht aufgenommen habe.

Es ist in der docs beschrieben:

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

{{ form.media }} 
{% endblock %} 
+0

Danke. Ich habe das versucht, aber es lädt das Widget immer noch nicht; Es gibt keine JavaScript-Fehler oder Python-Fehler. – max

+0

@max Im Autocomplete-light-Repository gibt es ein [Arbeitsbeispiel] (https://github.com/yourlabs/django-autocomplete-light/tree/master/test_project/select2_outside_admin) dieses Feldes. Ist es möglich, dass Sie die Lösung dort gefunden haben? – raratiru

+0

Ich habe diesen Link gesehen, wie er in meinem Post sagt. Es muss eine Kleinigkeit geben, die ich vermisse. – max

Verwandte Themen