django为用户模型添加关系

时间:2012-10-23 15:28:22

标签: python django django-models

我有一个使用内置用户模型的django项目。

我需要为用户添加关系。现在,用户喜欢的文章与“喜欢”关系以及其他用户的“跟随”关系紧随其后。

定义这些关系的最佳方法是什么? django doc建议创建一个与用户具有一对一关系的Profile模型,以向用户添加字段。但是如果在我的情况下没有额外的字段会被添加到用户配置文件中,这就太过分了。

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

对于这些特殊的多对多关系,您必须在模型中定义它们:

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()

答案 1 :(得分:1)

在当前发布的Django版本[最高1.4.x]上,标准做法是定义一个配置文件对象。这通过扩展/修改它来“污染”内置用户模型更可取。即将推出的Django版本将允许创建custom user models

总结:

  • 可以与当前生产版本的Django一起使用的最干净的解决方案是创建一个配置文件模型并在那里放置“喜欢”和“跟随”关系
  • 下一个版本的Django将允许您提供自己的用户模型 - 这正是您所需要的

答案 2 :(得分:1)

您应该尝试使用Django Relationships应用。它用于创建auth.users之间的关系,您将通过研究该代码了解如何创建自引用。然后,您可以将其扩展为更多泛型类型,或使用Django Content Types Framework

编写自己的类型

然而,由于Django ORM本身并未完全定义为图形数据库,因此您应该尝试坚持关系数据库概念,并在适当时使用ManyToMany关系或ForeignKey

答案 3 :(得分:0)

在文章中将ManytoMany关系添加到User模型。每当用户喜欢一篇文章时,他就会加入其中。该字段的长度将是该文章中的相似数量。