【问题标题】:Boolean Field for django_filter search bardjango_filter 搜索栏的布尔字段
【发布时间】:2021-04-06 15:29:58
【问题描述】:

我试图在搜索栏上显示一个选项,用户可以在其中为下面的布尔字段lead_register(和finished_leveltest)选择TrueFalse 值。

class LevelTestFilter(django_filters.FilterSet):
    class Meta:
        model = LevelTest
        fields = {
            'first_name': ['icontains'],
            'username': ['icontains'],
            'phone_number': ['icontains'],
            'email': ['exact'],
            'lead_register': ['exact'],
            'finished_leveltest': ['exact'],
        }

现在,我输入了exact,因为我不知道该放什么。我希望你们能帮忙。非常感谢!

【问题讨论】:

  • 这应该可以正常工作。如果模型字段是BooleanField,那么 django-filter 会自动使用BooleanFilter,除非你指定了一些东西。你试过运行这个吗?
  • 是的,我做到了。但是,我只是在实际网站上得到一个空白的下拉选择字段。
  • 请出示您的型号LevelTestlead_registerfinished_leveltest 是否有任何机会字段与 choices
  • 抱歉回复晚了。并不真地。每个字段都是 models.BooleanField(defualt=False)。

标签: django filter django-forms django-filter django-filters


【解决方案1】:

https://django-filter.readthedocs.io/en/master/guide/usage.html#overriding-default-filters

您可以通过将filter_overrides 添加到您的Meta 来覆盖所有表单的布尔值:

class LevelTestFilter(django_filters.FilterSet):
    class Meta:
        model = LevelTest
        fields = {
            'first_name': ['icontains'],
            'username': ['icontains'],
            'phone_number': ['icontains'],
            'email': ['exact'],
            'lead_register': ['exact'],
            'finished_leveltest': ['exact'],
        }
        filter_overrides = {
            models.BooleanField: {
                'filter_class': django_filters.BooleanFilter,
                'extra': lambda f: {
                    'widget': forms.CheckboxInput,
                },
            },
        }

或者,您可以只自定义单个字段,如果您以一种或另一种方式修改大部分字段,这将非常有用:

class LevelTestFilter(django_filters.FilterSet):
    lead_register__exact = django_filters.BooleanFilter(
        field_name='lead_register',
        label='A more expressive label',
        lookup_expr='exact',
        widget=forms.CheckboxInput,
    )
    ...

    class Meta:
        model = LevelTest
        fields = {
            'first_name': ['icontains'],
            'username': ['icontains'],
            'phone_number': ['icontains'],
            'email': ['exact'],
            'lead_register': ['exact'],
            'finished_leveltest': ['exact'],
        }

【讨论】:

  • 当我使用任一选项时,我得到错误'模型'未定义和'表单'未分别定义。
  • 确保您正在导入 django.forms 或 django.models。我不知道你的导入在文件顶部是什么样子的。
猜你喜欢
  • 2021-03-13
  • 2019-01-20
  • 2014-03-30
  • 2021-11-26
  • 2020-06-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多