可空布尔字段的Django过滤器

时间:2018-11-24 11:23:43

标签: django boolean django-filter

我想为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>

如何实现所需的行为?

1 个答案:

答案 0 :(得分:1)

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

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