1
我使用django-filter来为我的网站上的列表视图提供用户过滤。Django只筛选特定于查询集的选项
class MyModel(models.Model):
fruit = models.ForeignKey(Fruit)
price = models.CharField(...)
release_date = models.DateTimeField(...)
class MyFilter(filters.FilterSet):
...
class Meta:
model = MyModel
fields = ['fruit', 'price', 'release_date']
def my_banana_orange_view(request):
...
queryset = MyModel.objects.filter(fruit__name__in=['banana', 'orange'])
filter = Filter(request.GET, queryset=queryset)
return render(request, 'my_template.html', {'queryset': queryset, 'filter': filter})
现在,如果我这样做,我可以只显示有两种香蕉或橙关系MyModel
项,但MyFilter
还是会给予在Fruit
模型中所有水果的选择。我试图找到一个FilterSet的设置,只显示与输入查询集有关的选项,但找不到一个。有一个存在吗?
否则我想我将不得不重写过滤器做这样的事情:
class MyFilter(filters.FilterSet):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self.filters['fruit'].extra['queryset'] = Fruit.objects.filter(mymodel=self.queryset)
class Meta:
model = MyModel
fields = ['fruit', 'price', 'release_date']
这似乎有点大材小用。只显示基于输入查询集的选项似乎是理想的行为,但我找不到任何文档。有没有一个好的方法来做到这一点?任何帮助感谢!
确定我错过了我的示例中的请求信息。尽管如此,仍然可以在下拉列表中的“Fruit”模型中输入所有条目,而不仅仅是查询集中的条目... – DrBuck