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

时间:2016-07-20 12:48:28

标签: django-forms django-widget django-filters

我在我的项目中使用django_filters,其中一个是DateFromToRangeFilter。此过滤器在模板中生成两个输入字段,比喻为“从”和“到”。

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

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

但我无法理解如何设置不同的占位符(或每个字段的任何其他属性)。如“输入开始日期”字段“发件人”和“输入完成日期”字段“收件人”。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

默认情况下MultiWidget将所有attrs传递给每个子窗口小部件。要绕过此操作,您必须为RangeWidget创建子类,并为每个attrs小部件提供单独的from/to参数。

如下所示:

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)

答案 1 :(得分:1)

我在生产中使用以下两个不同的占位符。

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