【问题标题】:Customise choices for BooleanWidget in django_filters在 django_filters 中自定义 BooleanWidget 的选择
【发布时间】:2021-04-18 12:16:54
【问题描述】:

我正在使用 django_filters。对于布尔字段,它会生成以下 HTML:

<select name="bass" id="id_bass">
  <option value="">Unknown</option>
  <option value="true" selected="">Yes</option>
  <option value="false">No</option>

</select>

这来自Django's own specifics of NullFields。我怎样才能将那个丑陋的“未知”更改为其他东西?用户并没有真正在搜索“未知”;他们正在搜索“全部”,因为我的布尔字段是必需的,truefalse

小部件不接受choices 属性。

自己手动创建 HTML 部分解决了问题;不过,我会从view 实现这一点,并且只在模板上使用{{form}}

附言

在模板上执行此操作的最佳方法是在 DOM 加载后运行此 JavaScript:

    document.getElementById('id_bass').options[0].innerText = "---------";

有点老套;尽管如此,它仍然可以满足我的需求。

【问题讨论】:

    标签: django django-views django-filter


    【解决方案1】:

    您可以为此创建一个自定义小部件,并可以在您的BooleanFilter() 中使用它,

    from django_filters.widgets import BooleanWidget
    from django.utils.translation import gettext as _
    
    
    class CustomBooleanWidget(BooleanWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.choices = (("", _("Anything else")), ("true", _("Yes")), ("false", _("No")))
    
    
    class YourFilterSet(filters.FilterSet):
        your_field = filters.BooleanFilter(widget=CustomBooleanWidget)
    
        class Meta:
            model = YourModelClass
            fields = ("your_field",)

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2019-06-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2018-08-24
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多