也许你们中的一个可以帮我解决“Django-filter”的问题。在我的模板中,当我想要使用LinkWidget时,一个错误显示为'Enter a list of value‘。当我将LinkWidget与django_filters.AllValuesMultipleFilter一起使用时,在我的模板中,它会显示单词"all“和te字段类别的ID
当我将它与Django Form小部件“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' ]
发布于 2021-02-08 17:51:19
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。
根据文档:
模型多选项筛选器?
与MultipleChoiceFilter类似,但它适用于相关模型,用于ManyToManyFieldby default。ModelChoiceFilter?
除了与默认用于ForeignKey的相关模型一起使用之外,它与ChoiceFilter类似。
#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' ]
https://stackoverflow.com/questions/66068475
复制