首页 > 解决方案 > 在 django-filter 表单上添加标签或修改小部件

问题描述

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

在此处输入图像描述

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

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

过滤器.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。

标签: djangodjango-tables2django-filters

解决方案


您可以通过添加empty_label到您ModelChoiceFilter的 s.

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'],
        }  

编辑:
要添加placeholderCharFields 你可以试试这个:

from django.forms.widgets import TextInput  


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

推荐阅读