2012-10-23 525 views
1

我有一個使用內置用戶模型的django項目。django添加關係到用戶模型

我需要爲用戶添加關係。現在,對於用戶喜歡的文章和其他用戶的「跟隨」關係,現在有一個「喜歡」的關係。

定義這些關係的最佳方式是什麼? django文檔建議使用與用戶的一對一關係創建一個Profile模型,以便將字段添加到用戶。但沒有額外的字段將被添加到用戶配置文件在我的情況這是矯枉過正。

有什麼建議嗎?

+0

爲什麼你不想要反向關係? –

+0

@ IgnacioVazquez-Abrams我如何在一個「跟隨」關係上做到這一點,它是自我引用關係? – applechief

回答

3

對於這些特殊的許多一對多的關係,你必須在模型中定義它們:

class UserFollowing(models.Model): 
    user = models.ForeignKey(User, related_name='following') 
    following = models.ForeignKey(User, related_name='followed_by') 

那麼接下來,如果你有一個用戶,你可以做這樣的事情:

user = User.objects.get(...) 
user.following.all() # all users this user is following 
user.followed_by.all() # all users who follow this user 

至於文章,您已經設置了類似的模式:

class ArticleLike(models.Model): 
    article = models.ForeignKey(Article, related_name='likes') 
    like = models.ForeignKey(User, related_name='articles_like') 

Article.objects.get(...).likes.all() 

User.objects.get(...).articles_like.all() 
+0

即使不理想,這似乎是目前最實用的解決方案。對於喜歡的人,不需要定義一個單獨的模型,文章模型中的ManyToMany字段就可以。 – applechief

+0

沒錯,除非你想看看誰喜歡這篇文章(比如Facebook)。另外我在這個問題中沒有提到,但是你可以使用'ManyToManyField'創建多對多的關係,它將自己創建中間表。 – miki725

0

在您的文章中添加ManytoMany關係到用戶mo德爾。每次用戶喜歡一篇文章時,都會將其添加到其中。該字段的長度將是該文章中的數字。

+0

永遠不要修改'用戶'模型。 –

+0

我想我所說的是在他的文章模型中添加一個MantoManyField到用戶模型,而不是在用戶模型中。 –

1

在當前發佈的Django版本[最高1.4.x]上,標準做法是定義一個配置文件對象。這比通過擴展/修改內置用戶模型來「污染」更可取。即將推出的Django版本將允許創建custom user models

總結:

  • ,可以使用Django的當前生產版本中使用的乾淨的解決方案是創建一個配置文件模型,並把「喜歡」和「跟隨」的關係有
  • 下Django的版本將允許你提供你自己的用戶模型 - 這正是你所需要的
1

你應該嘗試使用這個Django Relationships應用程序。它意味着創建auth.users之間的關係,並且您將瞭解如何通過研究該代碼來創建自我引用。然後,您可以延長它更通用的類型或使用Django Content Types Framework

但是由於Django的ORM本身是不完全定義爲一個圖形數據庫,你應該儘量堅持到關係數據庫的概念寫你自己的,並使用ManyToMany關係或酌情適用ForeignKey