Я использую Select2 для django, чтобы создать форму автозаполнения. Я хотел бы, чтобы форма автозаполнения возвращала больше полей из базы данных. Например: в моделях у меня есть это:
class Places(models.Model):
r_name = models.CharField(max_length=200, default=None)
r_country = models.CharField(max_length=20, default='Englands', blank=True, null=True)
r_place = models.CharField(max_length=200, default=None, blank=True, null=True)
Я хочу, чтобы форма возвращала r_name + r_country + r_place.
Когда я использовал jquery автозаполнение, я написал это так, и это сработало:
def PlacesNameAutocomplete(request):
if request.is_ajax():
q = request.GET.get('term', '').capitalize()
search_qs = Places.objects.filter(r_name__startswith=q)
results = []
print(q)
for r in search_qs:
results.append(r.r_name + ' (' + r.r_country + ' - ' + r.r_place + ')')
data = json.dumps(results)
else:
data = 'fail'
mimetype = 'application/json'
return HttpResponse(data, mimetype)
Сейчас я использую этот код Select2 для автозаполнения, форма возвращает r_name, но я не знаю, как добавить страну и место для возврата результатов.
Views.py
from dal import autocomplete
from places.models import Places
class PlaceAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
queryset = Places.objects.all()
if self.q:
queryset = queryset.filter(r_name__istartswith=self.q)
return queryset
Forms.py
class newActivityForm(ModelForm):
route_id = forms.ModelChoiceField(
queryset=Places.objects.all(),
widget=autocomplete.ModelSelect2(url='place-autocomplete',
attrs={'data-placeholder': 'Start typing name ...', 'data-minimum-input-length': 3, 'style': 'width: 100%'
},))