抽象Django类中的多个外键字段

ebu*_*bug 2 python django django-models

我有一个抽象基类,该基类向用户模型声明了两个外键字段:

class BaseModel(models.Model):
    updated = models.DateTimeField(null=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="updated_by")
    created = models.DateTimeField(null=True)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="created_by")

    class Meta:
        abstract=True
Run Code Online (Sandbox Code Playgroud)

我有多个从此类继承的类。当我跑makemigrations,我收到以下错误为每个可能的类对和两个created_byupdated_by

myapp.ClassA.updated_by :(字段E305)“ ClassB.updated_by”的反向查询名称与“ ClassB.updated_by”的反向查询名称发生冲突。

提示:在“ ClassA.updated_by”或“ ClassB.updated_by”的定义中添加或更改related_name参数。

即使我已经设置了related_name。它仅适用于声明的两个外键字段之一。

在一个抽象类中是否可能有两个相同的模型的外键字段,如果是的话,如何设置它?

sty*_*ane 5

这是文档中提到的预期行为。

要变通解决此问题,当您在抽象基类中(仅)使用related_name时,部分名称应包含'%(app_label)s''%(class)s'

class BaseModel(models.Model):
    updated = models.DateTimeField(null=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="updated%(app_label)s_%(class)s_related")
    created = models.DateTimeField(null=True)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="created%(app_label)s_%(class)s_related")

    class Meta:
        abstract=True
Run Code Online (Sandbox Code Playgroud)