经过一年的 Django 经验,我发现我不太确定我related_names是否正确使用了 Django 。
想象一下我有三个模型
classA(models.Model):
pass
classB(models.Model):
pass
classC(models.Model):
modelA = models.ForeignKey(classA)
modelB = models.ForeignKey(classB)
Run Code Online (Sandbox Code Playgroud)
美好的。现在我正在考虑添加related_name到 classC 的 modelA 和 modelB,但令人沮丧的是我不能对两个字段使用相同的名称。换句话说,这段代码显然是错误的
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classC') # wrong
modelB = models.ForeignKey(classB, related_name = 'classC') # wrong
Run Code Online (Sandbox Code Playgroud)
另一方面,提出这样的方法:
classC(models.Model):
modelA = models.ForeignKey(classA, related_name = 'classA') # wrong
modelB = models.ForeignKey(classB, related_name = 'classB') # wrong
Run Code Online (Sandbox Code Playgroud)
会导致一个非常具有误导性(至少对我而言)的代码。考虑一下:
obj = classA.filter(classC__in = classA_qs)
Run Code Online (Sandbox Code Playgroud)
所以这样的命名会导致非常具有破坏性的代码classC = classA_instance。
在命名related_names方面的最佳实践是什么。我对 ManyToManyFields 有什么遗漏吗?实际上,我有一个大项目,但我从来没有使用过 ManyToManyFields,在示例中总是使用第三个表,如 classC。有什么我想念的吗?
如何使用变量 related_names 这样您就可以根据它们的应用程序和类将它们关联起来。
class ClassB(models.Model):
readers = ForeignKey('Reader',
related_name='readable_%(app_label)s_%(class)s_set+')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |