[英]Multiple foreign key fields in abstract Django class
我有一個抽象基類,該基類向用戶模型聲明了兩個外鍵字段:
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 :(字段E305)“ ClassB.updated_by”的反向查詢名稱與“ ClassB.updated_by”的反向查詢名稱發生沖突。
提示:在“ ClassA.updated_by”或“ ClassB.updated_by”的定義中添加或更改related_name參數。
即使我已經設置了related_name。 它僅適用於聲明的兩個外鍵字段之一。
在一個抽象類中是否可能有兩個相同的模型的外鍵字段,如果是的話,如何設置它?
這是文檔中提到的預期行為。
若要解決此問題,當您在抽象基類(僅)中使用
'%(app_label)s'
,部分名稱應包含'%(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
由於您多次使用related_name,因此在您繼承的模型類中,用戶模型的相關名稱不明確且會沖突。
您將必須為每個模型設置一個不同的related_name。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.