gpt4 book ai didi

python - 使用 Django 的 QuerySet 从 2 个不同的表中检索值

转载 作者:行者123 更新时间:2023-11-28 17:55:03 24 4
gpt4 key购买 nike

对于以下型号:

class Topping(models.Model):
name = models.CharField(max_length=100)

class Pizza(models.Model):
name = models.CharField(max_length=100)
toppings = models.ManyToManyField(Toppping)

我的数据如下所示:

比萨 table 和浇头 table 加入:

ID  NAME        TOPPINGS
------------------------------------
1 deluxe topping_1, topping_2
2 deluxe topping_3, topping_4
3 hawaiian topping_1

我想为所有名为 deluxe 的披萨获取披萨 ID 及其相应的配料。我的预期结果是:

1   topping_1
1 topping_2
2 topping_3
2 topping_4

连接表是:

pizza_toppings
--------------
id
pizza_id
topping_id

这是我想要实现的等效 SQL:

SELECT p.id, t.name
FROM pizza_toppings AS pt
INNER JOIN pizza AS p ON p.id = pt.pizza_id
INNER JOIN topping AS t ON t.id = pt.topping_id
WHERE p.name = 'deluxe'

关于相应的 Django 查询集是什么样子的任何想法?如果上述方法不够具有挑战性,我还想按名称对生成的浇头进行排序。

最佳答案

我不认为对此有一个干净的解决方案,因为您需要来自两个不同模型的数据。根据您的数据结构,您可能希望使用 select_related 来避免访问所有浇头的数据库。为了您想要的结果,我会这样做:

result = []
pizzas = Pizza.objects.select_related().filter(name='deluxe')
for pizza in pizzas:
for toppings in pizza.toppings.all():
result.append((pizza.pk, topping.name))

这会产生:

[
(1, topping_1),
(1, topping_2),
(2, topping_3),
(2, topping_4),
]

现在有不同的方法来设置数据,使用列表、元组和字典,但我认为您已经知道如何做到这一点。

关于python - 使用 Django 的 QuerySet 从 2 个不同的表中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com