我有一个使用内置用户模型的 django 项目。
我需要向用户添加关系。现在,用户喜欢的文章的“喜欢”关系和其他用户关注的“关注”关系。
定义这些关系的最佳方式是什么?django 文档建议创建一个与用户具有一对一关系的 Profile 模型,以向用户添加字段。但是在我的情况下,不会将额外的字段添加到用户配置文件中,这太过分了。
有什么建议么?
我有一个使用内置用户模型的 django 项目。
我需要向用户添加关系。现在,用户喜欢的文章的“喜欢”关系和其他用户关注的“关注”关系。
定义这些关系的最佳方式是什么?django 文档建议创建一个与用户具有一对一关系的 Profile 模型,以向用户添加字段。但是在我的情况下,不会将额外的字段添加到用户配置文件中,这太过分了。
有什么建议么?
对于这些特殊的多对多关系,你必须在模型中定义它们:
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()
在当前发布的 Django 版本 [ 最高 1.4.x ] 上,标准做法是定义一个配置文件对象。这比通过扩展/修改“污染”内置用户模型更可取。即将发布的 Django 版本将允许创建自定义用户模型。
总之:
您应该尝试为此使用Django 关系应用程序。它旨在创建之间的关系auth.users
,您将通过研究该代码了解如何创建自引用跟随。然后,您可以将其扩展为更通用的类型或使用Django 内容类型框架编写自己的
但是,由于 Django ORM 本质上并未完全定义为图形数据库,因此您应该尝试坚持关系数据库概念并酌情使用ManyToMany
关系ForeignKey
。
将文章中的多对多关系添加到 User 模型。每次用户喜欢一篇文章时,都会将他添加到其中。该字段的长度将是该文章中的点赞数。