gpt4 book ai didi

Django related_name 在多重关系的情况下命名最佳实践

转载 作者:行者123 更新时间:2023-12-03 23:57:39 25 4
gpt4 key购买 nike

经过一年的 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 s。我对 ManyToManyFields 有什么遗漏吗?实际上,我有一个大项目,但我从来没有使用过 ManyToManyFields,在示例中总是使用第三个表,如 classC。有什么我想念的吗?

最佳答案

如何使用变量 related_names 这样你可以根据他们的应用程序和类将它们关联起来。

class ClassB(models.Model):
readers = ForeignKey('Reader',
related_name='readable_%(app_label)s_%(class)s_set+')

关于Django related_name 在多重关系的情况下命名最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com