我有一个抽象基类,它向用户模型声明了两个外键字段:
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
我有多个继承自这个类的类 . 当我运行 makemigrations
时,每个可能的类对以及 created_by
和 updated_by
都会出现以下错误:
myapp.ClassA.updated_by :( fields.E305)“ClassB.updated_by”的反向查询名称与“ClassB.updated_by”的反向查询名称冲突 . 提示:将“related_name”参数添加或更改为“ClassA.updated_by”或“ClassB.updated_by”的定义 .
即使我已经设置了related_name . 它只能在声明的两个外键字段中的一个中正常工作 .
是否可以在抽象类中为同一模型提供两个外键字段,如果是,我该如何设置它?
2 回答
这是documentation中提到的预期行为 .
由于您多次使用related_name,因此在您继承的模型类中,用户模型的相关名称不清晰且存在冲突 .
您必须为每个模型设置不同的related_name .