python - 根据选择刷新下拉菜单 - 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'),
]
推荐阅读
- c - SIGCHLD 在父进程中导致 EOF
- swift - 如何在 Swift 中使用 strstr 在字符串中搜索字符串?
- xamarin.forms - Xamarin Forms Android 导航栏向下移动
- python - 特定条件下的最短路径问题
- c++ - QOpenGLWidget 多进程视频渲染性能
- oracle - 在 SQL Developer 中保存工作表
- html - Angular 和 Typescript 发送帖子请求
- r - R循环用2个计数器创建数据帧
- php - 创建时需要 Laravel 请求验证图像,但更新时不需要
- python - 如何在 Jupyter notebook 中找到函数的定义?