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

Django朋友多对多字段-更好地在字段中存储用户或用户配置文件(self)?,django,many-to-many,user-profile,Django,Many To Many,User Profile,我在Django找到了两种实现对称友谊系统的方法(你是我的朋友,所以我也是你的朋友): 根据文件中的建议: class UserProfile(models.Model): friends = models.ManyToManyField(User, related_name='friends') 现在,我想用一个select_相关查询获得所有“友好”的用户和用户配置文件模型,如下所示(这应该是反向连接查找): 我查询userprofile,因为这样,我可以使用select_relat

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

根据文件中的建议:

class UserProfile(models.Model):
    friends = models.ManyToManyField(User, related_name='friends')
现在,我想用一个select_相关查询获得所有“友好”的用户和用户配置文件模型,如下所示(这应该是反向连接查找):

我查询userprofile,因为这样,我可以使用select_related()并缓存所有相关对象

另一方面,我可以定义我的模型,将friends字段引用为“self”,如下所示:

class UserProfile(models.Model):
    friends = models.ManyToManyField('self')
现在,我的select_相关朋友查找如下所示:

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

哪一个是更好的解决方案?我找不到关于它的任何东西。任何想法,谢谢

西蒙

有时使用现有的插件比重新发明轮子要好


你看了吗?

嗯,是的,我知道,谢谢;同样是django simple friends(),但是实现这个特性并没有太多工作,而且我很清楚到底发生了什么。这两个软件包的功能都非常广泛,关于如何使用它们的文档也非常少。另外,两个应用程序都创建了额外的模型——为了简单起见,我宁愿使用一个多对多字段,让Django处理其余的。
profiles = this_user.get_profile().friends.all().select_related()