我有一个使用内置用户模型的django项目。
我需要为用户添加关系。现在,用户喜欢的文章与“喜欢”关系以及其他用户的“跟随”关系紧随其后。
定义这些关系的最佳方法是什么? django doc建议创建一个与用户具有一对一关系的Profile模型,以向用户添加字段。但是如果在我的情况下没有额外的字段会被添加到用户配置文件中,这就太过分了。
有什么建议吗?
答案 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。
总结:
答案 2 :(得分:1)
您应该尝试使用Django Relationships应用。它用于创建auth.users
之间的关系,您将通过研究该代码了解如何创建自引用。然后,您可以将其扩展为更多泛型类型,或使用Django Content Types Framework
然而,由于Django ORM本身并未完全定义为图形数据库,因此您应该尝试坚持关系数据库概念,并在适当时使用ManyToMany
关系或ForeignKey
。
答案 3 :(得分:0)
在文章中将ManytoMany关系添加到User模型。每当用户喜欢一篇文章时,他就会加入其中。该字段的长度将是该文章中的相似数量。