Django_filters - 未显示带有 ForeignKey 的 MultipleChoiceFilter
Posted
技术标签:
【中文标题】Django_filters - 未显示带有 ForeignKey 的 MultipleChoiceFilter【英文标题】:Django_filters - MultipleChoiceFilter with ForeignKey not shown 【发布时间】:2022-01-20 02:26:35 【问题描述】:我正在尝试使用多个过滤器过滤数字产品。其中包括功能模型。因此,用户选择一个类别,然后与该类别相关,可以按其功能过滤现有产品 模型.py
class Platform(models.Model):
name = models.CharField(max_length=200, verbose_name='Name')
thumbnail = models.ImageField(upload_to='DigitalProduct/thumbnails')
category = models.ForeignKey(Category, on_delete=models.CASCADE)
class Category(models.Model):
category = models.CharField(max_length=200)
filter_functions = models.ManyToManyField(Functionality, verbose_name='Filter by')
class Functionality(models.Model):
functionality = models.CharField(max_length=200)
我安装了 django-filter v2.4.0 并尝试添加过滤器。 过滤器.py
...
class PlatformFilter(django_filters.FilterSet):
func = django_filters.MultipleChoiceFilter(field_name='category', conjoined=True)
在我的views.py 函数中,我通过queryset=Platform.objects.filter(category=category)
来获取正确的数字产品,它工作正常,但类别值未显示在MultipleChoiceField 中。
views.py
def platform_list(request, slug):
category = Category.objects.get(slug=slug)
# filter query
f = PlatformFilter(request.GET, queryset=Platform.objects.filter(category=category))
return render(request, 'core/platform-list.html',
'category': category,
'filter': f
)
到目前为止,我可以看到 MultipleChoiceField,但没有显示任何值。
我尝试将字段名称更改为 field_name='category.category'
,但我得到一个 [invalid name]。
我错过了什么吗?
【问题讨论】:
请展示您的PlatformFilter
的更多部分,特别是Meta
课程,同时展示您的观点...
确定添加views.py。我还没有将 Meta 类设置为 PlatformFilter
Platform
的型号是什么?你没有在你的问题中显示它。
对不起,平台是DigitalProduct。我的名字错了..
【参考方案1】:
通常,如果有人想使用MultipleChoiceFilter
,他们必须提供您不提供的选项,因此不会显示任何选项。
此外,由于category
是ForeignKey
,那么您应该使用ModelMultipleChoiceFilter
[django-filter docs] 而不是MultipleChoiceFilter
:
class PlatformFilter(django_filters.FilterSet):
func = django_filters.ModelMultipleChoiceFilter(field_name='category', queryset=Category.objects.all(), conjoined=True)
【讨论】:
不错,适合。但是如何从我选择的类别中获取 filter_functions 呢?我想按 filter_functions 过滤。你知道吗?以上是关于Django_filters - 未显示带有 ForeignKey 的 MultipleChoiceFilter的主要内容,如果未能解决你的问题,请参考以下文章
如何内联输出 django_filters.RangeFilter 文本框?