Django : Many TO many relationship for same table

标签 django many-to-many

我有一个场景。

我的应用程序中有很多用户,每个人都有自己的(Trusted Circle)。Trusted Circle 与亲密 friend 有点相似。

我在这里遇到了困惑。

实现每个用户可信圈子的最佳方式是什么。可信圈子用户也像我的应用程序中的用户。

我听说过带有 self 属性的 ManyToMany 字段。值得在我的应用程序中使用它来维护每个用户的可信圈子。

如果可能的话,请建议我一些其他替代方案。

最佳答案

经典方法将是:

1 user circle can contains n users
1 user may be in n user circles.

这是一个 N:M 关系。

但是,因为这是针对 django 的,所以我的 django 设计建议是:

1:1 relationship to circle:
      1 user has 1 circle   

N:M relationship to users circle:
      1 circle can contains n users
      1 user may be in n circles.

圈子具有一对一和 m2m 关系:

class Circle(models.Model):
    owner = models.OneToOneField(User, primary_key=True)
    users = models.ManyToManyField(User)

要在创建用户时创建用户圈子:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

def create_circle(sender, **kw):
    user = kw["instance"]
    if kw["created"]:
        c = Circle(user=user)
        c.save()

post_save.connect(create_circle, sender=User)

享受并将我加入您值得信赖的圈子;)

关于 Django : Many TO many relationship for same table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15196407/

相关文章:

java - 多对多表内的多对多

python - 多部分 POST 请求 Google Glass

django - 如何从 Django 的 session 中获取登录用户的 uid?

DJANGO:如何以形式而不是文字 "model object"呈现模型对象名称?

mysql - Laravel 5.1 一对多和多对多模型的远程关系

c# - 多对多映射表

mysql - 使用 'with' 查询数据库并没有得到预期结果

python - Django 从数据库生成模型

django - pyvenv 和 pip 未安装到本地站 pip 包中

python - django-allauth:如何修改电子邮件确认网址?