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_by和updated_by:
myapp.ClassA.updated_by :(字段E305)“ ClassB.updated_by”的反向查询名称与“ ClassB.updated_by”的反向查询名称发生冲突。
提示:在“ ClassA.updated_by”或“ ClassB.updated_by”的定义中添加或更改related_name参数。
即使我已经设置了related_name。它仅适用于声明的两个外键字段之一。
在一个抽象类中是否可能有两个相同的模型的外键字段,如果是的话,如何设置它?
这是文档中提到的预期行为。
要变通解决此问题,当您在抽象基类中(仅)使用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)