我使用django-filter在我网站上的列表视图中提供用户过滤,例如
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']
这似乎有点矫枉过正。仅显示基于输入查询集的选项似乎是理想的行为,但我无法找到它的任何文档。有没有办法做到这一点?任何帮助表示赞赏!
答案 0 :(得分:0)
FilterSet
的第一个参数是data
,第二个参数是queryset
。
在视图中尝试filter = MyFilter(data=request.GET, queryset=queryset)
行。
请参阅:http://django-filter.readthedocs.io/en/develop/guide/usage.html#the-view