【发布时间】:2018-04-28 11:58:56
【问题描述】:
我正在使用出色的 django-filter 应用程序来过滤模型对象的查询集。但是,当我从视图中的查询集中 .exclude() 对象时,模板中的过滤器选择器仍然显示所有可用选项——即使是我从查询集中排除的对象。假设我的模型和视图如下所示:
#model
[...]
class Animal(models.Model):
REGION_CHOICES = (
(0, 'Africa'),
(1, 'Europe'),
)
name = models.CharField(max_length=100)
region = models.CharField(choices=REGION_CHOICES, max_length=100)
[...]
#view
[...]
qs = Animal.objects.all()
filter = AnimalFilter(request.GET, qs)
[...]
假设数据库中有两种动物:
zebra = Animal(name='Zebra', region='Africa')
frog = Animal(name='Frog', region'Europe')
当我在模板中渲染过滤器时,我正确地获得了一个包含欧洲和非洲两个选项的区域选择器。 但是,如果我在视图中使用一些逻辑来 .exclude() 查询集中的对象,如下所示:
#view
[...]
qs = Animal.objects.all().exclude(name='Frog')
filter = AnimalFilter(request.GET, qs)
[...]
现在,如果我在模板中渲染过滤器,我仍然会得到两个选项 Europe 和 Africa 用于区域,尽管查询集只包含一种具有区域 非洲。 任何想法如何获得模板中呈现的区域字段的正确选项?非常感谢任何帮助。
【问题讨论】:
标签: django django-filter django-filters