3

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

我需要向用户添加关系。现在,用户喜欢的文章的“喜欢”关系和其他用户关注的“关注”关系。

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

有什么建议么?

4

4 回答 4

6

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

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()
于 2012-10-23T15:42:33.677 回答
1

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

总之:

  • 可以与 Django 的当前生产版本一起使用的最简洁的解决方案是创建一个配置文件模型并将“喜欢”和“关注”关系放在那里
  • 下一个版本的 Django 将允许您提供自己的用户模型 - 这正是您所需要的
于 2012-10-23T16:44:47.870 回答
1

您应该尝试为此使用Django 关系应用程序。它旨在创建之间的关系auth.users,您将通过研究该代码了解如何创建自引用跟随。然后,您可以将其扩展为更通用的类型或使用Django 内容类型框架编写自己的

但是,由于 Django ORM 本质上并未完全定义为图形数据库,因此您应该尝试坚持关系数据库概念并酌情使用ManyToMany关系ForeignKey

于 2012-10-23T19:27:39.170 回答
0

将文章中的多对多关系添加到 User 模型。每次用户喜欢一篇文章时,都会将他添加到其中。该字段的长度将是该文章中的点赞数。

于 2012-10-23T15:44:59.660 回答