我有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与{strong> User 有一个ForeignKey
关系,而与u_a
则有相反的关系。但是 B 和 C 是 A 的子代。
所以在我看来,好像不重复您的代码一样。如何克服这个问题?
答案 0 :(得分:0)
要变通解决此问题,在您的模型class A(models.Model)
中,该值的一部分应包含'%(app_label)s'
和/或 '%(class)s'
。参见doc
'%(class)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)