Я пытаюсь создать фильтр диапазона дат, поэтому это моя модель и фильтр:
class Caixa(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
data = models.DateField('Data')
total = models.DecimalField('Total', decimal_places=2, max_digits=10, null=True)
unidade = models.ForeignKey(Unidade, on_delete=models.CASCADE)
def __str__(self):
return "Caixa " + self.unidade.nome
class CaixaFilter(django_filters.FilterSet):
data_inicial = django_filters.DateFilter(field_name='data', lookup_expr='gte'),
data_final = django_filters.DateFilter(field_name='data', lookup_expr='lte')
class Meta:
model = Caixa
fields = ['data']
Итак, в моем HTML у меня есть следующее:
<form method = "get">
<div class = "row">
<div class = "col s6">
{% render_field filter.form.data_inicial class = "datepicker" %}
</div>
<div class = "col s6">
{% render_field filter.form.data_final class = "datepicker" %}
</div>
</div>
<button type = "submit" class = "btn btn-primary">
<span class = "glyphicon glyphicon-search"></span> Buscar
</button>
</form>
Но в HTML появляется только поле «data_final».
Использовать DateFromToRangeFilter
как,
import django_filters
class CaixaFilter(django_filters.FilterSet):
data = django_filters.DateFromToRangeFilter()
class Meta:
model = Caixa
fields = ['data']
Таким образом, вы можете использовать два ключа, date_after
и date_before
для фильтрации диапазона дат.
ЗАМЕТКА: Суффикс after
и before
принадлежит django-filter==2.x
Я плохо разбираюсь в формах. Но это возможно в DjangoRESTFramework. В любом случае попробуйте
Хорошо, но вернемся к моему вопросу, почему появляется только одно поле? Не странно?
@RonaldoLanhellas На самом деле, я не знаю :( Ваш фрагмент работает должным образом в DRF. Итак, я предполагаю, что проблема может быть в вашем шаблоне / форме
Проблема с DateFromToRangeFilter заключается в том, что я не знаю, возможно ли разделить поля в разных div