繁体   English   中英

Django:如何为继承的父模型创建动态的related_name?

[英]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与UserForeignKey关系为u_au_a关系为u_a 但是BCA的子代。

所以在我看来,好像不重复您的代码已被违反。 如何克服呢?

要变通解决此问题,在您的模型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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM