首页 > 解决方案 > Django-filter:错误:使用 LinkWidget 时输入值列表

问题描述

也许你们中的一个人可以用“Django-filter”帮助我。在我的模板中,当我想使用 LinkWidget 时,会显示“输入值列表”错误。当我将 LinkWidget 与 django_filters.AllValuesMultipleFilter 一起使用时,它会在我的模板中显示单词“all”和 te 字段类别的 ID

当我将它与 Django 表单小部件“widget=forms.CheckboxSelectMultiple)”一起使用时,我可以过滤数据。

我的代码有什么问题?
谢谢。
Krgds。

  # file: filters.py
from portfolio.models import Project,Category,Client
import django_filters
from django_filters.widgets import LinkWidget

from django import forms

# error: Enter a list of values.
class ProjectFilter(django_filters.FilterSet):
   categories = django_filters.ModelMultipleChoiceFilter(queryset=Category.objects.all(),# this a ManyToManyField 
       widget=django_filters.widgets.LinkWidget)

   class Meta:
           model = Project
           fields = ['categories' ]


# shows "all" and the ID’s of te field categories
class ProjectFilter(django_filters.FilterSet):
   categories = django_filters.AllValuesMultipleFilter(widget=django_filters.widgets.LinkWidget)  

   class Meta:
       model = Project
       fields = ['categories' ]

标签: djangodjango-cmsdjango-filter

解决方案


LinkWidget 会将过滤后的结果以无序列表的形式列出,并在 html 中列出项目。IE:

<ul id="id_categories">
<li><a href="?categories=">All</a></li>
<li><a class="selected" href="?categories=1">Offices</a></li>
<li><a href="?categories=2"> Residential </a></li>
</ul>

为此,您可以使用“django_filters.filters.ModelChoiceFilter”。尽管要过滤的字段是ManyToManyField。

根据文档:

模型MultipleChoiceFilter¶

与 MultipleChoiceFilter 类似,但它适用于相关模型,默认用于 ManyToManyField。

模型选择过滤器¶

与 ChoiceFilter 类似,但它适用于相关模型,默认用于 ForeignKey。

#filters.py
class ProjectFilter(django_filters.FilterSet):
    categories = django_filters.filters.ModelChoiceFilter(
        required=False,
        queryset=Category.objects.all(),
        widget=django_filters.widgets.LinkWidget
    )
    
    class Meta:
        model = Project
        fields = ['categories' ]

推荐阅读