【发布时间】: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。我的名字错了..
标签: python django django-filter