经过一年的Django经历后,我发现我不太确定我是否正确使用Django related_names
。
想象一下,我有三个模型
classA(models.Model):
pass
classB(models.Model):
pass
classC(models.Model):
modelA = models.ForeignKey(classA)
modelB = models.ForeignKey(classB)
精细。现在我正在考虑将related_name
添加到classC的modelA和modelB中,但令人沮丧的想法是我不能在两个字段中使用相同的名称。换句话说,这段代码显然是错误的
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classC') # wrong
modelB = models.ForeignKey(classB, related_name = 'classC') # wrong
另一方面,提出这样的方法:
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classA') # wrong
modelB = models.ForeignKey(classB, related_name = 'classB') # wrong
会导致非常误导(至少对我来说)代码。考虑一下:
obj = classA.filter(classC__in = classA_qs)
因此,此类命名会导致代码classC = classA_instance
非常具有破坏性。
命名related_name
时的最佳做法是什么?关于ManyToManyFields有什么我想念的吗?实际上,我有一个大型项目,但我从未使用过ManyToManyFields,总是在示例中使用类似classC的第三个表。有什么我想念的吗?
答案 0 :(得分:3)
如何使用变量related_names,你可以根据他们的应用和类来关联它们。
class ClassB(models.Model):
readers = ForeignKey('Reader',
related_name='readable_%(app_label)s_%(class)s_set+')