Python 尝试根据开始和结束日期筛选数据

Python 尝试根据开始和结束日期筛选数据,python,django,django-filters,Python,Django,Django Filters,我正在使用django filter包根据start筛选数据, “我的模型”中定义的到期日和到期类别字段。问题是,如果我只选择了类\u,则会过滤\u字段数据,但当我 选择开始和结束日期以及应付款项的类别。未筛选任何数据。下面是我的代码 models.py filter.py views.py templates.html DuesFilter类中的对应行似乎指向了错误的字段。这两条线应该是: start_date = django_filters.DateFilter( field_na

我正在使用django filter包根据start筛选数据, “我的模型”中定义的到期日和到期类别字段。问题是,如果我只选择了类\u,则会过滤\u字段数据,但当我 选择开始和结束日期以及应付款项的类别。未筛选任何数据。下面是我的代码

models.py

filter.py

views.py

templates.html


DuesFilter类中的对应行似乎指向了错误的字段。这两条线应该是:

start_date = django_filters.DateFilter(
    field_name='start_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='gt',  # Include dates after the start date (exclusive)
    label='Start Date')

end_date = django_filters.DateFilter(
    field_name='end_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='lt',  # Include dates before the end date (exclusive)
    label='End Date')

我冒着很大的风险猜测您是否真的希望包含开始日期和结束日期之间的日期,并更新了查找表达式以反映这一点。

看起来DuesFilter类中的相应行指向了错误的字段。这两条线应该是:

start_date = django_filters.DateFilter(
    field_name='start_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='gt',  # Include dates after the start date (exclusive)
    label='Start Date')

end_date = django_filters.DateFilter(
    field_name='end_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='lt',  # Include dates before the end date (exclusive)
    label='End Date')

我冒着很大的风险猜测您是否真的希望包含开始日期和结束日期之间的日期,并更新了查找表达式以反映这一点。

是否可能是lt和gt的方式错误?如您所知,如果开始日期小于用户提供的数据,而结束日期大于提供的日期,您将进行匹配。我已对其进行了更改,但它不起作用。您是否可能将lt和gt颠倒过来?正如你所拥有的,当开始日期小于用户提供的数据,而结束日期大于提供的日期时,你会匹配。我已经更改了它,但它不起作用。谢谢你,上帝保佑你,我已经为此奋斗了几个星期,再次感谢我非常感谢你,上帝保佑你,我已经为此奋斗了几个星期,再次感谢你,我很感激
class ListMemberDues(LoginRequiredMixin, View):
    login_url = '/backoffice/'

    def get(self, request):
        queryset = DuesLevy.objects.filter(user=request.user)
        query_filter = DuesFilter(request.GET, queryset)

        context = {
            'form':query_filter.form,
            'query':query_filter,
        }
        return render(request, 'dashboard/list-member-dues.html', context)
  <form class="form-inline d-flex justify-content-around">
      <div class="col-sm-3 my-1">
          <div class="input-group">
            <div class="input-group-prepend">
              <div class="input-group-text">Class Of Dues</div>
            </div>
           {{ form.class_of_dues }}
          </div>
      </div>


       <div class="col-sm-3 my-1">
           <div class="input-group">
             <div class="input-group-prepend">
              <div class="input-group-text">Start Date</div>
             </div>
            {{ form.start_date }}
           </div>
       </div>
    <div class="col-sm-3 my-1">
           <div class="input-group">
             <div class="input-group-prepend">
              <div class="input-group-text">End Date</div>
             </div>
              {{ form.end_date }}
           </div>
       </div>

      <button type="submit" class="btn btn-success">Filter</button>
      {% csrf_token %}
    </form>
    {% if request.user %}
    <div class="row p-3 bg-light">               
      <div class="col-md-4">
        <h3>Account Details</h3>
        <h4>{{ request.user.first_name }} {{ single.user.last_name }}</h4>
        <h4>Phone {{ single.user.phone1 }}</h4>
        <h4>LCDA: {{ request.user.lcda }}</h4>
        <h4>Zone: {{ request.user.zone }}</h4>
        <h4>Area: {{ request.user.area }}</h4>
      </div>
      <div class="col-md-4">
        <img style="width: 200px; height: auto;" src="{{ request.user.additionalprofile.get_image_url }}" alt="">
      </div>

    </div>
    {% endif %}

    <table class="table">
        <tr>
            <th>Payment Date</th>
            <th>Categories</th>
            <th>Amount</th>
            <th>Channel</th>
            <th>Transaction ID</th>
        </tr>
        {% if query %}
          {% for q in query.qs %}
          <tr>
              <td>{{ q.date_recorded }}</td>
              <td>{{ q.class_of_dues }}</td>
              <td>&#8358;{{ q.amount }}</td>
              <td>{{ q.payment_channel }}</td>
              <td>{{ q.transaction_id }}</td>
          </tr>
          {% endfor %}

        {% endif %}
    </table>
start_date = django_filters.DateFilter(
    field_name='start_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='gt',  # Include dates after the start date (exclusive)
    label='Start Date')

end_date = django_filters.DateFilter(
    field_name='end_date',  # not payment_date
    widget=forms.DateInput(attrs={'class':'form-control', 'type':'date'}), 
    lookup_expr='lt',  # Include dates before the end date (exclusive)
    label='End Date')