簡體   English   中英

django related_name用於字段沖突

[英]django related_name for field clashes

我在模特中遇到了一場沖突:

class Visit(models.Model):
     user = models.ForeignKey(User)
     visitor = models.ForeignKey(User)

Error: One or more models did not validate:
profiles.visit: Accessor for field 'user' clashes with related field 'User.visit_set'. Add a related_name argument to the definition for 'user'.
profiles.visit: Accessor for field 'visitor' clashes with related field 'User.visit_set'. Add a related_name argument to the definition for 'visitor'.

在訪客領域使用什么是明智的'related_field'? 此模型基本上表示對特定用戶的個人資料發生的訪問。

我還應該用ManyToManyField替換任何ForeignKey嗎? 邏輯有點令人困惑。

編輯:這似乎解決了它,但我不確定這是否是我想要的。 :)

 class Visit(models.Model):
      user = models.ForeignKey(User)
      visitor = models.ForeignKey(User, related_name='visitors')

當你有一個ForeignKey ,它會創建一個名為模型名稱加上引用模型的_set的屬性。 這里的問題是兩個外鍵都想在User名為visit_set上創建一個屬性。 解決方案是為每個外鍵添加不同的相關名稱。

通常,我使用復數作為相關名稱。 在這些情況下,我在相關名稱中添加了“as”子句:

class Visit(models.Model):
     user = models.ForeignKey(User, related_name="visitsAsUser")
     visitor = models.ForeignKey(User, related_name="visitsAsVisitor")

您不需要ManyToManyField除非您每次Visit可以擁有零個或多個訪問者,或每次Visit用戶數。

如果訪問在您的應用程序中是一個強大的概念,那么按照您定義的方式進行訪問可能是有意義的: 訪問包括“用戶用戶”和“用戶訪問者”

但是,如果訪問只是用戶之間相互關聯的一種方式,那么也許您應該在用戶之間建立ManyToMany關系。 為此,您應該在用戶配置文件中使用ManyToManyField.symmetrical (在其中擴展auth.models.User附帶的信息)。

在任何情況下,關於related_name,你既可以禁用向后關系 ,如果你將不會被訪問來自用戶訪問 ,或使用一個明智的名稱,如visits_to_selfuservisits_to_othersvisitor ,這將允許誰訪問了看用戶通過調用user.visits_to_self以及user.visits_to_others訪問的用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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