当我尝试实现依赖字段时,Django select2没有找到结果
Posted
技术标签:
【中文标题】当我尝试实现依赖字段时,Django select2没有找到结果【英文标题】:Django select2 no results found when I try to implement dependent fields 【发布时间】:2021-07-08 01:02:54 【问题描述】:我正在尝试实现依赖选择字段,如 here 所示。
我的模型显示在这里:
class VehicleBrand(BaseModel):
"""Brands for types of vehicles"""
name = models.CharField(_('Name'), max_length=50)
def __str__(self):
return self.name
class VehicleModel(BaseModel):
"""vehicle model"""
brand = models.ForeignKey(
'awesomeinventory.VehicleBrand',
verbose_name=_('Brand of the vehicle'),
on_delete=models.CASCADE,
related_name='models',
)
name = models.CharField(_("Vehicle model name"), max_length=50)
def __str__(self):
return self.name
我的 forms.py 看起来像:
class MarketTrackForm(forms.Form):
brand = forms.ModelChoiceField(
queryset=VehicleBrand.objects.all(),
to_field_name='name',
label=u'Brand',
widget=ModelSelect2Widget(
model=VehicleBrand,
search_fields=['name__icontains'],
attrs='style': 'width: 100%', 'data-minimum-input-length': 0,
),
)
model = forms.ModelChoiceField(
queryset=VehicleModel.objects.all(),
to_field_name='name',
label=u'Model',
widget=ModelSelect2Widget(
model=VehicleModel,
search_fields=['name__icontains'],
dependent_fields='brand': 'brand',
max_results=500,
attrs=
'style': 'width: 100%',
'data-minimum-input-length': 0,
,
),
)
我的 urls.py
urlpatterns += i18n_patterns(
...
path('select2/', include('django_select2.urls')),
...
)
我的设置看起来像
...
CACHES =
"default":
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS":
"CLIENT_CLASS": "django_redis.client.DefaultClient",
,
,
'select2':
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/2",
"OPTIONS":
"CLIENT_CLASS": "django_redis.client.DefaultClient",
,
,
# Set the cache backend to select2
SELECT2_CACHE_BACKEND = 'select2'
...
当我删除依赖字段时,一切正常。我还尝试复制文档(国家和城市模型)中显示的确切示例,即使这样也没有用。当我添加依赖字段时,它只是开始说没有找到结果(在选择依赖字段后),如果我从表单中删除依赖字段,它就可以工作。所以我认为这可能与设置或缓存有关。却想不通。任何提示都会有所帮助,谢谢。
---更新---
当我删除时
kwargs.update(
f"model_field_name__in": filter(
None, self.request.GET.get(f"form_field_name[]", "").split(",")
)
for form_field_name, model_field_name in self.widget.dependent_fields.items()
)
来自 select2.views.AutoResponseView 的这段代码刚刚开始工作。我不想惹它。我怎么能在不删除这堆代码的情况下修复它,甚至这堆代码是做什么的?有人吗?
【问题讨论】:
【参考方案1】:我猜在从普通 ModelSelect2Widget 折旧的 select2 依赖字段的较新版本中。文档仍然显示它,但这是对我有用的解决方案:
在表单中将 ModelSelect2Widget 转换为 ModelSelect2MultipleWidget。
【讨论】:
以上是关于当我尝试实现依赖字段时,Django select2没有找到结果的主要内容,如果未能解决你的问题,请参考以下文章
django-select2:如果没有选择国家,如何禁用城市选择? (django 2.2)
带有指定字段的 Django select_related 打破了多个一对一关系