问题描述
也许你们中的一个可以帮助我解决“Django-filter”。在我的模板中,当我想使用 LinkWidget 时,会显示“输入值列表”错误。 当我将 LinkWidget 与 django_filters.AllValuesMultipleFilter 一起使用时,它会在我的模板中显示单词“all”和字段类别的 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' ]
解决方法
LinkWidget 会将过滤后的结果作为无序列表和 html 中的列表项列出。 即:
<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。
根据文档:
ModelMultipleChoiceFilter¶
与 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' ]