如何为 DateFromToRangeFilter 设置不同的占位符?

How to set different placeholders for DateFromToRangeFilter?

我在我的项目中使用 django_filters,其中之一是 DateFromToRangeFilter。此过滤器在您的模板中生成两个输入字段,比喻为 - 'From' 和 'To'.

给这些字段设置类似的属性是没有问题的。例如:

end = django_filters.DateFromToRangeFilter(
        widget=django_filters.widgets.RangeWidget(
                attrs={'placeholder': 'yyyy-mm-dd'}))

但我不明白如何设置不同的占位符(或每个字段的任何其他属性)。像字段 'From' 的 'Enter the start date' 和字段 "To".

的 'Enter the finish date'

有人可以帮忙吗?

默认情况下 MultiWidget 将所有 attrs 传递给每个子窗口小部件。要绕过这一点,您必须继承 RangeWidget 并为每个 from/to 小部件提供单独的 attrs 参数。

类似于以下内容:

class MyRangeWidget(RangeWidget):
    def __init__(self, from_attrs=None, to_attrs=None, attrs=None):
        super(MyRangeWidget, self).__init__(attrs)

        if from_attrs:
            self.widgets[0].attrs.update(from_attrs)
        if to_attrs:
            self.widgets[1].attrs.update(to_attrs)

我在生产中使用下面的代码来获得两个不同的占位符。

import django_filters
from django_filters.widgets import RangeWidget, SuffixedMultiWidget
from jobsboard.models import Job 

class DurationRangeWidget(SuffixedMultiWidget, RangeWidget):
    suffixes = ['min', 'max']

    def __init__(self, attrs=None):
        super().__init__(attrs)
        self.widgets[0].attrs.update({'placeholder': 'from'})
        self.widgets[1].attrs.update({'placeholder': 'to'})


class JobsConsultantFilter(django_filters.FilterSet):
    hirer = HirerFilter(name='hirer', max_length=255)
    duration = django_filters.RangeFilter(name='duration', widget=DurationRangeWidget)
    class Meta:
        model = Job
        fields = ['duration', 'pay', 'hirer', ]