隐藏在Djangoffi中产生零结果的筛选器项

2024-06-16 09:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对django过滤器应用程序有一个问题:如何隐藏将产生零结果的项。我认为有一个简单的方法可以做到这一点,但我想知道怎么做。在

我在ModelChoiceFilter上使用LinkWidget,如下所示:

provider = django_filters.ModelChoiceFilter(queryset=Provider.objects.all(), 
    widget=django_filters.widgets.LinkWidget) 

我需要做的是过滤查询集并只选择将产生至少一个结果的提供者,并排除其他的结果。 有办法吗?在


Tags: django方法应用程序过滤器objects提供者allwidgets
3条回答

如果我正确理解您的问题,我相信您希望使用AllValuesFilter。在

import django_tables

provider = django_filters.AllValuesFilter(
    widget=django_filters.widgets.LinkWidget)

更多信息请访问:http://github.com/alex/django-filter/blob/master/docs/ref/filters.txt#L77

也许queryset可以是可调用的,而不是“真正的”queryset对象。这样,就可以动态生成它。至少这在Django模型中可以作为其他模型的参考。在

callable可以是模型中的类方法。在

基本上,您需要应用过滤器,然后再次应用它们,但是在新生成的queryset上。像这样:

f = SomeFilter(request.GET) 
f = SomeFilter(request.GET, queryset=f.qs)

现在,当您拥有正确的queryset时,您可以在init中动态重写提供程序:

^{pr2}$

不漂亮,但很管用。您可能应该将这两个调用封装到更有效的filter方法中。在

相关问题 更多 >