Sim*_*ger 6 django many-to-many user-profile
我在Django 找到了两种实现对称友谊系统的方法(你是我的朋友,所以我也是你的朋友):
正如文档中所建议的那样:
class UserProfile(models.Model):
friends = models.ManyToManyField(User, related_name='friends')
Run Code Online (Sandbox Code Playgroud)
现在,我想让所有"友好"的用户和用户配置模型具有一个select_related-query,如此(应该是反向连接查找):
profiles = UserProfile.objects.filter(user__in=request.user.get_profile().friends.all()).select_related()
Run Code Online (Sandbox Code Playgroud)
我查询userprofile,因为这样,我可以使用select_related()并缓存所有相关对象.
另一方面,我可以将引用friends字段的模型定义为"self",如下所示:
class UserProfile(models.Model):
friends = models.ManyToManyField('self')
Run Code Online (Sandbox Code Playgroud)
现在,我的select_related朋友查找看起来像这样:
profiles = this_user.get_profile().friends.all().select_related()
Run Code Online (Sandbox Code Playgroud)
我总是需要用户对象和它的相关配置文件:第二种方法通过select_related()反向查找更简单,但实际上是相同的.然而,通过使用"self"作为场参考,Django为我处理了对称的友谊.因此,我不必手动在数据库中为每个友谊创建两个条目.Django为我做到了这一点.但是,对称选项仅适用于"自"引用字段.
哪个更好的解决方案?我找不到任何关于它的东西.任何想法赞赏 - 谢谢!
西蒙,
有时最好使用现有的插件,而不是尝试重新发明轮子。
你看过django-friends吗?