簡體   English   中英

根據選擇刷新下拉菜單-Django Smartmin

[英]Refresh Drop-down based on selection - Django Smartmin

我們有類似的模型:

Class District:
   name = models.CharField()

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

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

我們正在使用Smartmin進行CRUD操作。 在創建位置時,在我的表單中,我們顯示地區,村庄下拉列表和名稱字段(位置名稱)。 我需要根據地區選擇刷新村庄。

請在這方面幫助我。 提前致謝

在一個類似的項目中,我使用了django-autocomplete-light: https : //django-autocomplete-light.readthedocs.io/en/master/tutorial.html ,它可以從一個下拉菜單到另一個下拉菜單進行級聯選擇。

我使用它如下:

在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'),
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM