我在我的项目中使用django_filters,其中一个是DateFromToRangeFilter。此过滤器在模板中生成两个输入字段,比喻为“从”和“到”。
为这些字段设置类似的属性没有问题。例如:
end = django_filters.DateFromToRangeFilter(
widget=django_filters.widgets.RangeWidget(
attrs={'placeholder': 'yyyy-mm-dd'}))
但我无法理解如何设置不同的占位符(或每个字段的任何其他属性)。如“输入开始日期”字段“发件人”和“输入完成日期”字段“收件人”。
有人可以帮忙吗?
答案 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', ]