簡體   English   中英

抽象Django類中的多個外鍵字段

[英]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_byupdated_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM