Django friend 作为多对多字段 - 更好地在字段中存储用户或用户配置文件( self )?

标签 django many-to-many user-profile

我找到了两种实现 的方法对称友谊 Django 中的系统(你是我的 friend ,所以我也是你的 friend ):

正如文档中所建议的:

class UserProfile(models.Model):
    friends = models.ManyToManyField(User, related_name='friends')

现在,我想通过一个 select_related-query 获得所有“友好”的用户和用户配置文件模型(这应该是反向联接查找):
profiles = UserProfile.objects.filter(user__in=request.user.get_profile().friends.all()).select_related()

我查询用户配置文件,因为这样,我可以使用 select_related() 并缓存所有相关对象。

另一方面,我可以定义我的模型,将friends 字段引用为“self”,如下所示:
class UserProfile(models.Model):
    friends = models.ManyToManyField('self')

现在,我的 select_related friend 查找看起来像这样:
profiles = this_user.get_profile().friends.all().select_related()

我总是需要用户对象和它的相关配置文件:关于通过 select_related() 进行反向查找,第二种方法要简单得多,但实际上是相同的。但是,通过使用“self”作为字段引用,Django 为我处理了对称的友谊。因此,我不必手动在数据库中为每个友谊创建两个条目。 Django 为我做到了这一点。然而,对称选项仅适用于“自我”引用字段。

哪个是更好的解决方案?我找不到任何关于它的信息。任何想法表示赞赏 - 谢谢!

最佳答案

西蒙,

有时最好使用现有插件,而不是尝试重新发明轮子。

你有没有看过django-friends ?

关于Django friend 作为多对多字段 - 更好地在字段中存储用户或用户配置文件( self )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7887133/

相关文章:

python - 在迁移到 Django 1.6 时摆脱 get_profile()

django - 给出初始值会在 django 中引发 'value for field is required' 错误

python - 如何在 Django 中隐藏成功页面

python - 同时使用组和个人权限

database - 如何首先与 Entity Framework 代码热切加载多对多关系?

android - 无法获取 Facebook 个人资料图片

python - django migration 创建只有一个字段的表

php - Codeigniter 多对多查询

java - hibernate : StackOverflowException logging ManyToMany association

swift - 从 Firestore 中获取用户配置文件的数据(swift、iOS、Xcode、firebase/firestore)