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?
Ich bin froh, dass du es gelöst hast. Ich werde das Versehen im relevanten Teil meiner Antwort korrigieren, danke! – raratiru