有这样的模型
class Category(models.Model):
title = models.CharField(max_length=64)
class SubCategory(models.Model):
parent_id = models.ForeignKey(Category, related_name='sub_parent_id')
sub_cat_title = models.CharField(max_length=64)
class Item(models.Model):
parent_id = models.ForeignKey(SubCategory, related_name='item_parent_id')
item_title = models.CharField(max_length=64)
如何在1 次查询中获取 Category 对象的所有相关记录到数据库?据我了解,这可以通过prefetch_related以某种方式完成,但我不知道具体如何。
如果我理解正确,这应该会有所帮助:
查询将使用 2 个连接执行 1 次
来源:https ://djbook.ru/rel1.4/ref/models/querysets.html
如果您需要获取所有相关对象(以免进行额外查询),则应使用select_related( ) 。
此方法仅适用于一对一关系 ( OneToOne )、一对多关系以及需要检索一个对象时。
例子:
Item.objects.select_related().all()
prefetch_related()使用这个方法,我们也得到所有相关的对象,但它已经适用于所有类型的关系。因为 在请求数据后,它会在 Python 级别进行合并。
例子:
Item.objects.prefetch_related().all()
在您的情况下,最好使用select_related('parent_id'),并在 Django 文档部分中阅读有关这些方法的更多信息
QuerySet API
。