【问题标题】:Add label or modifying widget on django-filter form在 django-filter 表单上添加标签或修改小部件
【发布时间】:2021-06-21 23:42:33
【问题描述】:

我正在寻找一种方法来指定过滤器表单中的选择字段的用途,这就是现在的样子:

而且很难理解选择输入的用途,理想的做法是更改默认选项(“Unkown”和“--------”),但应该为每个选项自定义。已经尝试过,但找不到方法,有可能吗? 如果有人知道这样做的方法,那就太好了。

添加标签应该是更简单的方法,但不知道怎么做。

filters.py

class PatientFilter(django_filters.FilterSet):
    class Meta:
        model = Patient
        fields = {
            'dni': ['exact'],
            'first_name': ['icontains'],
            'last_name': ['icontains'],
            'risk': ['exact'],
            'status': ['exact'],
            'ubication': ['exact'],
            'supervisor': ['exact'],
        }

HTML

    {% if filter %}
        <form action="" method="get" class="form form-inline">
            {% bootstrap_form filter.form layout='inline' field_class="mr-3 mt-3" %}
            <div class="mt-3">
            {% bootstrap_button 'Filter' button_class="btn-secondary" %}
            <a href="{% url 'patients' %}" class="ml-3 btn btn-secondary">Clear</a>
            </div>
        </form>
    {% endif %}

选择输入是外键,这是它在models.py中的定义

status = models.CharField(max_length=15, choices=STATUS_CHOICES)
ubication = models.ForeignKey(Ubication, on_delete=models.CASCADE)
supervisor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

我正在使用带有 django-filters 的表 2。

【问题讨论】:

    标签: django django-tables2 django-filters


    【解决方案1】:

    您可以通过将empty_label 添加到您的ModelChoiceFilters 来做到这一点。

    class PatientFilter(django_filters.FilterSet):
    
        ubication = django_filters.ModelChoiceFilter(
            queryset=Ubication.object.all(),
            empty_label="Placeholder",
        )
    
        class Meta:
            model = Patient
            fields = {
                'dni': ['exact'],
                'first_name': ['icontains'],
                'last_name': ['icontains'],
                'risk': ['exact'],
                'status': ['exact'],
                'ubication': ['exact'],
                'supervisor': ['exact'],
            }  
    

    编辑:
    要将placeholder 添加到CharFields,您可以试试这个:

    from django.forms.widgets import TextInput  
    
    
    class FooFilter(filters.FilterSet):
         bar = filters.CharFilter(..., widget=TextInput(attrs={'placeholder': 'baz'}))
    

    【讨论】:

    • 请注意,您不能将empty_label 添加到CharFilters,您可以使用widget 向它们添加占位符
    • 这正是我想要的 Ty! (ModelChoiceFilters 不带“s”,object 带“s”,以防您想编辑它)。我可以对状态字段做类似的事情(只需将ModelChoiceFilters 更改为ChoiceFilterqueryset 更改为choices)。但不能冒风险(这是一个布尔字段而不是外键或字符字段)。知道如何解决吗?这是我尝试过的:risk = django_filters.BooleanFilter(empty_label="Risk") 但我收到错误unexpected keyword argument 'empty_label'
    • 抱歉,我修正了拼写错误,我不确定您是否可以将placeholder 添加到布尔字段尝试label。请注意empty_label 仅适用于ChoiceFields,对于CharField,您应该添加placeholder。我将更新添加placeholderCharFields 的答案。
    猜你喜欢
    • 2011-12-02
    • 2021-04-20
    • 1970-01-01
    • 2021-10-14
    • 2020-07-12
    • 2015-05-24
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多