python - Django-如何在我的模板的嵌套 for 循环中显示来自类似对象的正确数据?
问题描述
在我的内部DetailView
,我有 3 个非常相似的对象,但被过滤的内容略有不同。
# views.py
def get_context_data(self, **kwargs):
# all sales for all line items (products) with a specified title
sales = Sales.objects.filter(publication__title=self.object)
# filters print sales for a specified title
print_sales = Sales.objects.filter(publicaton__title=self.object, line_item=1)
# filters digital sales for a specified title
digital_sales = Sales.objects.filter(publicaton__title=self.object, line_item=2)
理想情况下,我想显示一个表格,其中所有销售额按产品和月份分开,如下所示:
| Month | Print Sales | Digital Sales |
| --------------- | ----------- | ------------- |
| January | 2,000 | 3,000 |
| February | 1,000 | 2,000 |
| --------------- | ----------- | ------------- |
| Total: | 3,000 | 5,000 |
| Combined Total: | | 8,000 |
但是,我还没有找到一种方法来正确格式化表格并在我的模板中提供正确的过滤数据。下面的代码片段显示了格式正确的表格(类似于上面),但每个月都显示了组合的销售数据。
{% for item in sales %}
<tr>
<td>{{ item.issue }}</td>
{% for obj in print_sales %}
<td>{{ obj.net_sales}}</td>
{% endfor %}
{% for obj in digital_sales%}
<td>{{ obj.net_sales}}</td>
{% endfor %}
</tr>
{% endfor %}
##### output ######
| Month | Print Sales | Digital Sales |
| --------------- | ----------- | ------------- |
| January | 3,000 | 5,000 |
| February | 3,000 | 5,000 |
| --------------- | ----------- | ------------- |
| Total: | 3,000 | 5,000 |
| Combined Total: | | 8,000 |
到目前为止,我对模板和标签所做的所有调整都破坏了表格设计。
这是我的模型的缩写版本:
# models.py
class LineItem(models.Model):
name = models.CharField(...) # print sales, digital sales...
...
class Publication(models.Model):
title = models.CharField(...)
...
class Sales(models.Model):
publication = models.ForeignKey(Publication, ...)
issue = models.ForeignKey(Issue, ...) # gets each month from the Issue model
line_item = models.ForeignKey(LineItem, ...)
net_sales = models.DecimalField(...)
...
我可以在模板或视图中进行哪些更改以更好地解决此问题?
解决方案
您正在使用 for 循环
{% for item in sales %}
导致 print_sales 和 digital sales 执行两次。在这里,他们俩可能都只返回一个对象。尝试这个:
{% for item in sales %}
<tr>
<td>{{ item.issue }}</td>
</tr>
{% endfor %}
{% for obj in print_sales %}
<tr>
<td>{{ obj.net_sales}}</td></tr>
{% endfor %}
{% for obj in digital_sales%}
<tr> <td>{{ obj.net_sales}}</td></tr>
{% endfor %}
推荐阅读
- html - OBIEE 12C:可下载文件的 HTML 缓存
- google-cloud-platform - 我不小心删除了我在 gcp 上的服务帐户
- laravel-5 - 当我添加关系时,在表中添加数据会显示错误
- javascript - Firestore auth,使用用户 UID 与 ionic 记录 id
- python - Keras 的 MSE 损失函数显示与 Tensorflow 的 MSE 度量不同的输出?
- node.js - 无服务器和 GlobalSecondaryIndexes - 使用 dynamodb 查询条件缺少关键架构元素
- .net - 运行所有测试,但停止并调试其中一个
- node.js - mongo-go-driver 在使用 MongoDB Atlas 时因服务器选择超时而失败
- json - JSON Schema OneOf 级联
- php - 如何在 Magento 中拥有一个管理控制器并在 phhtml 中使用它来上传文件