Django 过滤器 | 布尔字段

P. *_*eda 7 python django django-filter

我正在使用 django-filter 包,我有很多布尔字段。有没有办法仅在字段为 True 时进行过滤?并展示所有其他可能性?

例如,如果我有 3 个字段:True、False、False... 渲染第一个字段等于 True 但与 de rest 无关的对象,不要将其视为 False。

模型.py

class Product(models.Model):
    name = models.CharField(max_length=15)
    is_dangerous = models.BooleanField()
    is_secret = models.BooleanField()
    is_active = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

过滤器.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,
                },
            },
        }
Run Code Online (Sandbox Code Playgroud)

网址.py

url(r'^products/$', views.products, name='products')
Run Code Online (Sandbox Code Playgroud)

当我products/第一次进入时,我只看到所有布尔字段都为 False 的产品,我想看到所有产品。

Mat*_*you 11

你不需要所有这些过滤器的东西。要根据 BooleanField 的值过滤模型,您只需要

dangerous_products = Product.objects.filter(is_dangerous=True)
Run Code Online (Sandbox Code Playgroud)

这将返回所有模型实例的 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 %}
Run Code Online (Sandbox Code Playgroud)

上面的模板将显示每一个产品的名称is_dangerous设置为True

  • 我知道这一点,但我需要平台中有一个用户可以修改的搜索引擎 (2认同)