首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-filter x布尔字段

Django-filter x布尔字段
EN

Stack Overflow用户
提问于 2017-12-27 15:02:25
回答 3查看 19.3K关注 0票数 8

我使用django-filter包,我有许多布尔字段。是否有一种方法仅在字段为True时进行筛选?展示所有其他的可能性?

例如,如果我有三个字段: True,False,False.呈现具有第一个字段的对象等于True,但与de rest无关,不要认为它是假的。

model.py

代码语言:javascript
复制
class Product(models.Model):
    name = models.CharField(max_length=15)
    is_dangerous = models.BooleanField()
    is_secret = models.BooleanField()
    is_active = models.BooleanField()

filters.py

代码语言:javascript
复制
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

代码语言:javascript
复制
url(r'^products/$', views.products, name='products')

当我第一次进入products/时,我只看到包含所有布尔字段= False的产品,并且希望看到所有产品。

EN

回答 3

Stack Overflow用户

发布于 2017-12-27 16:34:24

你不需要所有的过滤材料。要根据BooleanField的值对模型进行筛选,只需

代码语言:javascript
复制
dangerous_products = Product.objects.filter(is_dangerous=True)

这将返回所有模型实例的QuerySet,并将is_dangerous设置为True

然后,您可以将这个变量传递给模板,并显示如下信息

代码语言:javascript
复制
{% 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的每个产品的名称。

票数 12
EN

Stack Overflow用户

发布于 2019-11-15 03:57:45

要进行有效的布尔筛选,您必须使用

代码语言:javascript
复制
from django_filters import rest_framework as filters 
代码语言:javascript
复制
class SearchFilter(filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='icontains')
    class Meta:
        model = Product
        fields = ['name', 'is_dangerous', 'is_secret', 'is_active',]
票数 1
EN

Stack Overflow用户

发布于 2017-12-27 21:48:09

您不应该使用CheckboxInput,因为小部件无法区分“不存在”和“假”。只需删除过滤器覆盖并使用默认的select小部件即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47994336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档