我使用django-filter包,我有许多布尔字段。是否有一种方法仅在字段为True时进行筛选?展示所有其他的可能性?
例如,如果我有三个字段: True,False,False.呈现具有第一个字段的对象等于True,但与de rest无关,不要认为它是假的。
model.py
class Product(models.Model):
name = models.CharField(max_length=15)
is_dangerous = models.BooleanField()
is_secret = models.BooleanField()
is_active = models.BooleanField()filters.py
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.py
url(r'^products/$', views.products, name='products')当我第一次进入products/时,我只看到包含所有布尔字段= False的产品,并且希望看到所有产品。
发布于 2017-12-27 16:34:24
你不需要所有的过滤材料。要根据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的每个产品的名称。
发布于 2019-11-15 03:57:45
要进行有效的布尔筛选,您必须使用
from django_filters import rest_framework as filters class SearchFilter(filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Product
fields = ['name', 'is_dangerous', 'is_secret', 'is_active',]发布于 2017-12-27 21:48:09
您不应该使用CheckboxInput,因为小部件无法区分“不存在”和“假”。只需删除过滤器覆盖并使用默认的select小部件即可。
https://stackoverflow.com/questions/47994336
复制相似问题