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

问题描述 投票:0回答:1

我有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与用户有qazxsw poi关系,与qazxsw poi有反向关系。但B和C是A的孩子。

所以在我看来好像不要重复你的代码被违反。怎么克服这个?

python django python-3.x django-models django-views
1个回答
0
投票

若要解决此问题,在您的模型中ForeignKey值的一部分应包含u_a和/或class A(models.Model)。看到'%(app_label)s'

'%(class)s'被该字段所使用的子类的低级名称替换。

doc被子类所包含的应用程序的低级名称替换。每个安装的应用程序名称必须是唯一的,并且每个应用程序中的模型类名称也必须是唯一的,因此生成的名称最终会有所不同。

'%(class)s'
© www.soinside.com 2019 - 2024. All rights reserved.