[英]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_self
對user
和visits_to_others
的visitor
,這將允許誰訪問了看用戶通過調用user.visits_to_self
以及user.visits_to_others
訪問的用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.