【问题标题】:Django-filter for nullable Boolean Field可空布尔字段的 Django 过滤器
【发布时间】:2018-12-09 14:53:29
【问题描述】:

我想将django-filter 用于BooleanField(blank=True, null=True)。当我开箱即用时,表单会生成三个选项:未知(无过滤)、是(True)和否(False)。但是,我需要None 的第四个选项,以便过滤器专门选择那些值为None 的记录。

我的模型(相关部分)

class Record(Model):
    accepted = BooleanField(blank=True, null=True, verbose_name=_("Accepted?"))

我的过滤器(相关部分)

class RecordFilter(FilterSet):
    class Meta:
        model = Record
        fields = OrderedDict((
            ("accepted", ["exact"]),
        ))

我的看法

class RecordList(LoginRequiredMixin, FilterView):
    model = Record
    paginate_by = 25
    template_name = "record/record_list.html"
    filterset_class = RecordFilter

我的模板(相关部分)

<form method="get" role="form" class="form">
      {{ filter.form.as_p }}
      <button>{% trans "Filter" %}</button>
</form>

我怎样才能达到预期的行为?

【问题讨论】:

    标签: django boolean django-filter


    【解决方案1】:

    这可以通过使用正确的参数构造ChoiceFilter 来解决,正如用户演示的here

    也就是说,框架应该完全支持NullBooleanFields,我已经打开了issue 来解决这个问题。

    【讨论】:

    • 看起来像一个解决方案,但 AFAIK,Django 的 NullBooleanField 已被弃用,取而代之的是 BooleanField(null=True)。这可能是个问题吗?
    • 好点。也就是说 - 在短期内应该没关系。 ChoiceFilter 解决方案应该适用于这两种情况。
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2014-03-15
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多