Обновить раскрывающийся список на основе выбора - Django Smartmin - PullRequest
0 голосов
/ 29 октября 2018

У нас есть такие модели, как:

Class District:
   name = models.CharField()

Class Village:
  name = model.CharField()
  district = models.Foriegnkey()

Class Location:
  name = models.CharField()
  village = models.Foreginkey()

Мы используем Smartmin для операций CRUD. При создании местоположения в моей форме мы отображаем район, выпадающий список деревень и поле имени (название местоположения). Мне нужно обновить деревню на основе выбора района.

Пожалуйста, помогите мне в этом. Заранее спасибо

1 Ответ

0 голосов
/ 29 октября 2018

В аналогичном проекте я использовал django-autocomplete-light: https://django -autocomplete-light.readthedocs.io / en / master / tutorial.html , он может делать каскадный выбор из одного выпадающий на другой.

Я использовал его следующим образом:

In forms.py:

class TripModelForm(forms.ModelForm):

    plate_number = forms.ModelChoiceField(
        queryset=TruckUnit.objects.all().order_by('plate_number'),
        widget=autocomplete.ModelSelect2(url='plate_number_autocomplete',
                                         forward=['hauler'])
    )
    driver = forms.ModelChoiceField(
        queryset=Driver.objects.all().order_by('name'),
        widget=autocomplete.ModelSelect2(url='driver_autocomplete',
                                         forward=['hauler'])
    )

В views.py:

from dal import autocomplete
class PlateNumberAutocomplete(autocomplete.Select2QuerySetView):

    def get_queryset(self):
        if not self.request.user.is_authenticated:
            return TruckUnit.objects.none()

        qs = TruckUnit.objects.all().order_by('plate_number')
        hauler = self.forwarded.get('hauler', None)

        if hauler:
            qs = qs.filter(hauler=hauler)
        if self.q:
            qs = qs.filter(plate_number__istartswith=self.q)

        return qs

class DriverAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):

        if not self.request.user.is_authenticated:
            return Driver.objects.none()

        qs = Driver.objects.all().order_by('name')
        hauler = self.forwarded.get('hauler', None)

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

        return qs

В urls.py

urlpatterns += [
    path('plate-number-autocomplete/', views.PlateNumberAutocomplete.as_view(), name='plate_number_autocomplete'),
    path('driver-autocomplete/', views.DriverAutocomplete.as_view(), name='driver_autocomplete'),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...