gpt4 book ai didi

Django prefetch_related 与反向外键查找

转载 作者:行者123 更新时间:2023-12-03 16:14:36 25 4
gpt4 key购买 nike

Django docs 中给出这些模型:

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

class Pizza(models.Model):
name = models.CharField(max_length=50)
toppings = models.ManyToManyField(Topping)

我想得到浇头并用他们的pizza_set做一些事情:
toppings = Topping.objects.all()

for topping in toppings:
pizzas_with_this_topping = topping.pizza_set()
# do stuff with pizzas_with_this_topping

如何使用 prefetch_related(或其他技术)获取所有比萨数据,而无需为每个 Topping 中的每个 Pizza 访问数据库?

最佳答案

像这样预取它们:

toppings = Topping.objects.prefetch_related('pizza_set')

那么以下不会命中数据库:
for topping in toppings:
pizzas_with_toppings = topping.pizza_set.all()

我想补充一点,Django 努力使简单的事情易于使用(毫无疑问,Django 做得很好),但这显然使 Django 做了很多隐含的事情,这些事情在应用程序中并不明显代码,所以当你做一些高级的事情时,你应该预料到意外,阅读 Django 文档,它阐明了所有的魔法,并使用 Django 调试工具栏等工具来验证一切是否如你所愿。

关于Django prefetch_related 与反向外键查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50193842/

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