繁体   English   中英

django将关系添加到用户模型

[英]django add relationships to user model

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

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

定义这些关系的最佳方法是什么? django doc建议创建与用户一对一关系的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的当前生产版本一起使用的最干净的解决方案是创建一个配置文件模型,并在其中放置“ like”和“ follow”关系
  • Django的下一版本将允许您提供自己的用户模型-正是您需要的模型

您应该尝试为此使用Django Relationships应用程序。 它旨在在auth.users之间创建关系,您将通过学习该代码来了解如何创建自引用跟随。 然后,您可以将其扩展为更多通用类型,或者使用Django Content Types Framework编写自己的类型

但是,由于Django ORM本质上并未完全定义为图数据库,因此您应尝试坚持关系数据库的概念,并适当地使用ManyToMany Relationship或ForeignKey

将您的文章中的ManytoMany关系添加到用户模型。 每当用户喜欢一篇文章时,就将其添加到其中。 该字段的长度将是该文章中like的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM