📜  如何使用 Django ORM 连接三个表 - Python (1)

📅  最后修改于: 2023-12-03 15:37:59.862000             🧑  作者: Mango

如何使用 Django ORM 连接三个表

在 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 连接三个表,实现复杂的数据查询操作。