提问者:小点点

如何用下拉菜单过滤表?


我创建了一个收集所有日常收入的应用程序。 模型如下:

class Income(models.Model):
        date=models.DateField('', default="GG/MM/YYYY")
        income=models.DecimalField()

我创建了一个简单的模板,其中包含表单和数据表,其中包含收集的所有数据。

<form method="post">
<div class="row">
h5>Income data collection</h5>
<div class="row">
             <div class="form-group col-2 0 mb-0" >
                 {{form.income|as_crispy_field}}
             </div>
             <div class="form-group col-2 0 mb-0" >
                 {{form.date|as_crispy_field}}
             </div>
  </div>
        <table class="table" >           
          <thead>
            <tr>
              <th>Income</th>
              <th>Date</th>
            </tr>
          </thead>
          <tbody>
              {% for inc in income%}
              <tr>
                  <td>{{inc.income}}</td>
                  <td>{{inc.date}}</td>                  
              </tr>
              {% endfor %}
          </tbody>
        </table>

在视图中,我添加了以下筛选器:

income=Income.objects.filters(data__year='2020')

此时,我创建了另一个模型,该模型将参考年份设置为:

我有以下模型

class Timing(models.Model):
    reference_year=models.DecimalField(max_digits=4, decimal_places=0, default="2020")

该模型具有一个视图和表单,使客户可以注册所有参考年份(2020年,2021年等)。 现在我想将reference_yearincomeviews.py链接起来。 怎么做? 带有一个下拉菜单,其中包含所有已填充的reference_year。 例如,如果客户机在计时模型中保存了等于2020的reference_year,那么在下拉列表中,客户机可以选择它,视图会动态更新过滤器。


共1个答案

匿名用户

在models.py中,在这两个模型之间添加一个一对一的关系。

下面的程序是在django文档中给出的,你可以用它作为参考。

    from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

    def __str__(self):
        return "%s the place" % self.name

class Restaurant(models.Model):
    place = models.OneToOneField(
        Place,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)