/ / Como definir espaços reservados diferentes para DateFromToRangeFilter? - django-forms, django-widget, django-filters

Como definir espaços reservados diferentes para DateFromToRangeFilter? - django-forms, django-widget, django-filters

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 № 1

Por 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", ]