class ModelA(Model):
pass
class ModelB(Model):
modela = ForeignKey(ModelA, on_delete=CASCADE)
class ModelC(Model):
modelb = ForeignKey(ModelB, on_delete_CASCADE)
在这种情况下,Django会自动为我们创建一些额外的经理。例如,如果ma
是ModelA
的实例,那么我们可以写:ma.modelb_set.all()
,如果mb
是ModelB
的实例,那么我们可以写:mb.modelc_set.all()
。
能够引用与ModelC
相关的所有ModelA
个实例会很方便。当然,如果ma
是ModelA
的实例,我们总是可以写:ModelC.objects.filter(modelb__modela=ma).distinct()
。但是,如果我们可以为ModelA
定义一个允许我们通过简单编写来执行上述查询的经理会更方便:ma.modelc_set.all()
如何为ModelA
编写这样的经理?
答案 0 :(得分:2)
这不是管理者的工作,而只是一种普通的模型方法。由于您正在查找与ModelA的特定实例相关的项目,因此您可以在该模型上创建方法。如果您真的想要,可以将其称为modelc_set
并将其设为属性:
@property
def modelc_set(self):
return ModelC.objects.filter(modelb__modela=self).distinct()