Как использовать FilterSet в Django с DateTimeFromToRangeFilter - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь отфильтровать модель с помощью 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...