django - 如何将组合查询集添加到一个模板表中
问题描述
我有 3 个模型,分别是 CarDetailsAdd、ShippingDetails、MaintenanceDetails。ShippingDetails 和 MaintenanceDetails 模型连接到 CarDetailsAdd 外键,每个模型都有一个价格字段。这是 我如何解决这个问题并将数据放在一行中的问题
#View
def get(self, request, *args, **kwargs):
profit = CarDetailsAdd.objects.filter(status='sold')
total_profit = profit.aggregate(Sum('profit_amount'))['profit_amount__sum']
shipping = ShippingDetails.objects.filter(car__status='sold').values(
'car').annotate(
total_shipping_price=Sum('price'))
maintenance = MaintenanceDetails.objects.filter(car__status='sold').values(
'car').annotate(
total_maintenance_price=Sum('price'))
query = chain(shipping, total_profit, maintenance)
context = {
'profit_data': query,
'total_amount_profit': total_profit,
}
return render(request, 'pdf/profit.html', context)
#template
<tbody>
{% for profit_data in profit_data %}
<tr style="text-align: center">
<td>{{ profit_data.name }}</td>
<td>{{ profit_data.purchased_amount }}</td>
<td>{{ profit_data.total_shipping_price }}</td>
<td>{{ profit_data.total_maintenance_price }}</td>
<td>{{ profit_data.sold_details.sold_amount }}</td>
<td>{{ profit_data.profit_amount }}</td>
</tr>
{% endfor %}
</table>
解决方案
您现在正在做的是创建三个不同的查询并将它们简单地连接起来。结果是每辆车有 3 个不同的对象,因为 Django 不知道要组合哪些结果。
处理此问题的最佳方法是创建一个查询,并使用从关系派生的值对其进行注释。您可以使用与 relationship_name__property 的关系中的值来注释 CarDetailsAdd 查询。
我不确定您的模型是什么样的,但假设 CarDetailsAdd 有两个称为 shipping_details 和 maintenance_details 的多对多关系,您可以执行以下操作:
def get(self, request, *args, **kwargs):
total_profit = profit.aggregate(Sum('profit_amount'))['profit_amount__sum']
profit = CarDetailsAdd.objects.filter(status='sold')
.annotate(total_shipping_price=Sum('shipping_details__price')
.annotate(total_maintenance_price=Sum('maintenance_details__price')
context = {
'profit_data': profit,
'total_amount_profit': total_profit,
}
return render(request, 'pdf/profit.html', context)
推荐阅读
- ios - 在 XCode 中通过内存地址查找 UIView?
- oracle - oracle sql从前一个日期检索后续日期
- html - CSS不会在服务器上加载图像
- jquery - 链接到另一个网站的搜索框不起作用
- reactjs - 对 Android 和 ios 有条件的原生可触摸点击做出反应
- c++ - 枚举运算符不工作
- spring - Postman 304 Not Modified 错误,spring rest api
- go - 如何使用 goroutines 发出多个请求并获得响应
- keras - 如何将同一时间戳中的多个文本传递给keras嵌入层
- python - Pyinstaller exe 执行脚本失败