Как вернуть несколько значений в Django Форма автозаполнения Select2 - PullRequest
0 голосов
/ 21 апреля 2020

Я использую 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%'
    },))
...