Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django模板中筛选反向查找_Python_Django_Django Views_Django Templates_Django Queryset - Fatal编程技术网

Python 在Django模板中筛选反向查找

Python 在Django模板中筛选反向查找,python,django,django-views,django-templates,django-queryset,Python,Django,Django Views,Django Templates,Django Queryset,我有一个像这样的模型 class Invoice(models.Model): inv_number = models.CharField(max_length=10, primary_key=True) customer = models.ForeignKey(Customer, on_delete=models.PROTECT) inv_date = models.DateField() class Txn(models.Model): invoice =

我有一个像这样的模型

class Invoice(models.Model):
    inv_number = models.CharField(max_length=10, primary_key=True)
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
    inv_date = models.DateField()

class Txn(models.Model): 
    invoice = models.ForeignKey(Invoice, on_delete=models.PROTECT)
    transaction_date = models.DateField()
    reference = models.CharField(max_length=12)
    amt = models.IntegerField()
我想在我的模板中显示一个报告,其中列出了过滤后的发票,每个发票都有一个子列表,其中包含过滤后的交易记录

在我看来,我已经做了以下工作:

invoice_list = Invoice.objects.filter(customer=customer)
{% for invoice in invoice_list %}
   {{ invoice.inv_number }}, {{ invoice.customer}}, {{ invoice.inv_date }}
   {% for txn in invoice.txn_set.all %}
      {{ txn.transaction_date }}, {{ txn.reference }}, {{ txn.amt }}
   {% endfor %}
{% endfor %}
我将其传递到我的模板中。在模板中,我执行以下操作:

invoice_list = Invoice.objects.filter(customer=customer)
{% for invoice in invoice_list %}
   {{ invoice.inv_number }}, {{ invoice.customer}}, {{ invoice.inv_date }}
   {% for txn in invoice.txn_set.all %}
      {{ txn.transaction_date }}, {{ txn.reference }}, {{ txn.amt }}
   {% endfor %}
{% endfor %}
这对于显示每个筛选发票的整个交易列表非常有用。问题是,如何在模板中过滤每个发票的交易列表-如果我只想要特定日期范围内的交易或与特定参考匹配的交易,该怎么办?在将主查询集放入上下文之前,是否有一种方法可以将过滤器传递到视图中每个发票的txn_集合查询集,而不将其转换为列表


谢谢您的回复

建议:在视图中收集发票和交易记录,而不是在模板中

使用此视图代码,您可以将查询量减少到1,因此它比您的代码(使用每个发票的
Txn
表查询)优化得多:

然后在模板中:

{% for elem in invoice_data_list %}
    {{ elem.invoice.inv_number }}
    {{ elem.invoice.customer}}
    {{ elem.invoice.inv_date }}

    {% for txn in elem.txn_list %}
         {{ txn.transaction_date }}
         {{ txn.reference }}
         {{ txn.amt }}
    {% endfor %}
{% endfor %}

这样做非常有效。非常感谢。