[英]Django: How to create a dynamic related_name for an inherited parent model?
我有4个型号:
class User(models.Model):
name = models.CharField(max_length=255)
class A(models.Model):
user= models.ForeignKey("User", related_name="u_a", on_delete=models.CASCADE)
title = models.CharField(max_length=255)
class B(A):
user= models.ForeignKey("User", related_name="u_b", on_delete=models.CASCADE)
#isn't the code repeated???
b_field = CharField(max_length=255)
class C(A):
user= models.ForeignKey("User", related_name="u_c", on_delete=models.CASCADE)
#isn't the code repeated???
c_field = CharField(max_length=255)
在这里,A与User的ForeignKey
关系为u_a
与u_a
关系为u_a
。 但是B和C是A的子代。
所以在我看来,好像不重复您的代码已被违反。 如何克服呢?
要变通解决此问题,在您的模型class A(models.Model)
,该值的一部分应包含'%(app_label)s'
和/或 '%(class)s'
。 看到文件
'%(class)s'
被替换为使用该字段的子类的小写名称。
'%(app_label)s'
由子类所在的应用程序的小写'%(app_label)s'
替换。 每个安装的应用程序名称必须唯一,并且每个应用程序内的模型类名称也必须唯一,因此最终的名称将不同。
class A(models.Model):
user= models.ForeignKey("User", related_name="%(class)s_set",
on_delete=models.CASCADE)
#user= models.ForeignKey("User", related_name="%(app_label)s_%(class)s_set",
#on_delete=models.CASCADE)
title = models.CharField(max_length=255)
class B(A):
b_field = CharField(max_length=255)
class C(A):
c_field = CharField(max_length=255)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.