当我尝试实现依赖字段时,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 打破了多个一对一关系

Django - 使用 url 实现 select2

Django 模型 - 字段依赖

(Django)当我尝试将夹具文件加载到我的数据库中时,我不断收到字段冲突错误

使用 django 和 jquery 创建依赖下拉菜单时遇到问题