[英]Django filters options specific to queryset only
I use django-filter to provide user filtering on a list view on my site, eg 我使用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})
Now if I do this, I can display just the MyModel
entries that have either banana or orange relationships, but MyFilter
will still give the option of all the fruits in the Fruit
model. 现在,如果执行此操作,则可以仅显示具有香蕉或橙色关系的MyModel
条目,但是MyFilter
仍将提供Fruit
模型中所有水果的选项。 I'm trying to find a setting for a FilterSet to just show options related to the input queryset, but can't find one. 我正在尝试为FilterSet找到一个设置,使其仅显示与输入查询集相关的选项,但找不到一个。 Does one exist? 是否存在?
Otherwise I guess I would have to override the filter to do something like this: 否则,我想我必须重写过滤器才能执行以下操作:
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']
Which seems a bit overkill. 这似乎有点矫kill过正。 Only showing options based on the input queryset seems like desirable behaviour, but I can't find any documentation for it. 仅显示基于输入查询集的选项似乎是理想的行为,但是我找不到任何文档。 Is there a good way to do this? 有什么好方法吗? Any help appreciated! 任何帮助表示赞赏!
The first param for FilterSet
is data
, the second is queryset
. FilterSet
的第一个参数是data
,第二个参数是queryset
。
Try something along the lines of filter = MyFilter(data=request.GET, queryset=queryset)
in your view. 在视图中尝试使用filter = MyFilter(data=request.GET, queryset=queryset)
的方法。
See: http://django-filter.readthedocs.io/en/develop/guide/usage.html#the-view 请参阅: http : //django-filter.readthedocs.io/en/develop/guide/usage.html#the-view
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.