📅  最后修改于: 2023-12-03 15:37:59.862000             🧑  作者: Mango
在 Django 开发中,ORM 是连接数据库的核心,其强大的功能可以帮助我们轻松地完成数据的增删改查操作。在实际开发中,经常需要连接多个表来获取特定的数据,本文将介绍如何使用 Django ORM 连接三个表,以实现复杂的数据查询操作。
首先,我们需在 models.py 中添加三个模型类,分别对应三张表:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.CharField(max_length=50)
price = models.FloatField()
class Payment(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
amount = models.FloatField()
timestamp = models.DateTimeField(auto_now_add=True)
其中,User 和 Order 之间建立了一对多的关系,Order 和 Payment 之间也建立了一对多的关系。
接下来,我们可以使用 Django ORM 进行多表查询。例如,我们要查询用户“张三”的所有订单及其支付情况,可以使用以下代码:
from django.db.models import Sum
result = Order.objects.filter(user__name='张三').annotate(total=Sum('payment__amount'))
其中,filter() 方法表示筛选条件,user__name 表示连接 User 表的 name 字段,Sum() 方法表示对 payment__amount 进行求和,annotate() 方法则表示给查询结果添加新的 total 字段。
最后,我们可以将结果以 Markdown 格式返回,示例代码如下:
| 订单编号 | 商品名 | 价格 | 支付金额 | 支付时间 |
| -------- | ------ | ---- | -------- | ------------------------- |
| 1 | 商品 A | 100 | 80 | 2022-02-23 12:00:00+08:00 |
| 2 | 商品 B | 200 | 200 | 2022-02-24 13:30:00+08:00 |
以上是一个示例结果,我们可以根据实际情况进行调整。
完成以上操作,便可以轻松地使用 Django ORM 连接三个表,实现复杂的数据查询操作。