Eu estou usando django_filters no meu projeto e um deles é um DateFromToRangeFilter. Este filtro gera dois campos de entrada em seus modelos, figurativamente - "De" e "Para".
Não há problema em definir um atributo semelhante para esses campos. Por exemplo:
end = django_filters.DateFromToRangeFilter(
widget=django_filters.widgets.RangeWidget(
attrs={"placeholder": "yyyy-mm-dd"}))
Mas não consigo entender como definir espaços reservados diferentes (ou quaisquer outros atributos para cada um dos campos). Como "Digite a data de início" para o campo "De" e "Digite a data final" para o campo "Para".
Alguém pode ajudar?
Respostas:
3 para resposta № 1Por padrão MultiWidget
passa tudo attrs
para cada subwidget. Para contornar isso, você teria que subclasse RangeWidget
e fornecer separado attrs
parâmetros para cada um dos from/to
widgets.
Algo como o seguinte:
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 para resposta № 2
Eu uso o abaixo na produção para ter dois espaços reservados diferentes.
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", ]