Я пытаюсь отфильтровать модель с помощью Filterset
(django -filter) и выполнить рендеринг из / для выбора поля формы в моем шаблоне. К сожалению, я не могу понять, как заставить это работать. В то время как мои поля code
и power_category
отображаются нормально, при попытке визуализации поля reported
отображается только текстовое поле, если только я не установил type="date"
, тогда при нажатии поля даты появляется всплывающее окно выбора даты; однако отображается только один (нужно два, to
и from
для выбора диапазона).
Я использую Django 3.0.5, django_filters и widget_tweaks включены в настройки, и я не вижу ошибок.
Filters.py
import django_filters
from django_filters import DateRangeFilter, DateFilter
from django_filters import DateTimeFromToRangeFilter
from django_filters.widgets import RangeWidget
from reports.models import Report
from django import forms
class PostFilter(django_filters.FilterSet):
reported = django_filters.DateTimeFromToRangeFilter(
widget=django_filters.widgets.RangeWidget(
attrs={'class': 'datepicker'}
)
)
class Meta:
model = Report
first_name = django_filters.CharFilter(lookup_expr='icontains')
fields = ['reported', 'fixed', 'code', 'power_category'] ]
Шаблон
{% load widget_tweaks %}
<form method="get">
<div class="well">
<h4 style="margin-top: 0">Filter</h4>
<div class="row">
<div class="form-group col-sm-4 col-md-3">
{{ filter.form.code.label_tag }}<br />
{% render_field filter.form.code class="form-control" %}
</div><br /><br />
<div class="form-group col-sm-4 col-md-3">
{{ filter.form.power_category.label_tag }}<br />
{% render_field filter.form.power_category class="form-control" %}
</div>
<div>Date_Time {{ filter.form.reported.label_tag }}
{% render_field filter.form.reported %}
</div>
</div>
<button type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-search"></span> Search
</button>
</div>
</form>
Модель
class Report(models.Model):
name = models.CharField(max_length=200)
code = models.ManyToManyField(Code)
power_category = models.ManyToManyField(PowerCategory)
location = models.CharField(max_length=200)
geom = PointField()
reported = models.DateTimeField()
fixed = models.DateTimeField()
description = models.CharField(max_length=200)
solution = models.CharField(max_length=200)
added_by = models.ForeignKey(User, on_delete=models.CASCADE)
pub_date = models.DateTimeField(auto_now_add=True, blank=True)
@property
def latitude(self):
return self.location_gps.x
@property
def longitude(self):
return self.location_gps.y
Просмотр
from django.shortcuts import render
from django.views.generic import ListView
from reports.models import Report
from django_filters.views import FilterView
from reports.filters import PostFilter
class PostList(FilterView):
model = Report
context_object_name = 'reports'
filter_class = PostFilter
template_name = 'reports/report_filter_map.html'