我正在使用django-filter包,我有很多布尔字段。有没有办法只在字段为True时进行过滤?并显示所有其他可能性?
例如,如果我有3个字段:True,False,False ...渲染第一个字段等于True但对de rest无关的对象,不要认为它是False。
model.朋友
class Product(models.Model):
name = models.CharField(max_length=15)
is_dangerous = models.BooleanField()
is_secret = models.BooleanField()
is_active = models.BooleanField()
filters.朋友
class SearchFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Product
fields = ['name', 'is_dangerous', 'is_secret', 'is_active',]
filter_overrides = {
models.BooleanField: {
'filter_class': django_filters.BooleanFilter,
'extra': lambda f: {
'widget': forms.CheckboxInput,
},
},
}
URLs.朋友
url(r'^products/$', views.products, name='products')
当我第一次进入products/
时,我只看到所有布尔字段= False的产品,我想看到所有产品。
你不需要所有的过滤器。要根据BooleanField的值过滤模型,您只需要
dangerous_products = Product.objects.filter(is_dangerous=True)
这将返回所有模型实例的QuerySet,其中is_dangerous
设置为True
。
然后,您可以将此变量传递给模板并显示如下信息
{% for product in dangerous_product %}
<!-- Put whatever way you want to display each product in here. EX:-->
<h1>{{ product.name }}</h1>
{% endfor %}
上面的模板将显示is_dangerous
设置为True
的每个产品的名称。
您不应该使用CheckboxInput
s,因为窗口小部件无法区分“不存在”和“错误”。只需删除过滤器覆盖并使用默认的选择小部件。