Django嵌套外键摘要

2024-10-08 20:16:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Django 2.2项目中有以下模型:

class ModelA(models.Model):
    ModelA_id = models.UUIDField('ModelA ID', default = uuid.uuid4)

class ModelB(models.Model):
    ModelB_id = models.UUIDField('ModelB ID', default = uuid.uuid4)
    ModelA = models.ForeignKey(ModelA, on_delete=models.CASCADE)

class ModelC(models.Model):
    ModelC_id = models.UUIDField('ModelC ID', default = uuid.uuid4)
    ModelB = models.ForeignKey(ModelB, on_delete=models.CASCADE,)

class ModelD(models.Model):
    ModelD_id = models.UUIDField('ID', default = uuid.uuid4)
    ModelC = models.ForeignKey(ModelC, on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

如您所见,模型嵌套方式如下:

ModelD has FK to ModelC
ModelC has FK to ModelB
ModelB has FK to ModelA

如果我这样做:

ModelD.objects.filter(pk=0).select_related('ModelC__ModelB__ModelA')

这是否意味着在单个(或有限的)数据库请求中一次查询所有数据?我假设这也意味着它会将所有从ModelD开始的数据引用放入内存,对吗

我的最终目标是总结有多少个ModelD引用ModelC,哪些(不是多少)ModelC引用ModelB,最后是哪些ModelB引用ModelA


Tags: iddefaultmodeluuidonmodelsclassforeignkey

热门问题