Django:同桌的很多关系

时间:2013-03-04 07:16:28

标签: django many-to-many

我有一个场景。

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

我在这里感到困惑。

每个用户实施受信任圈子的最佳方式是什么。受信任的圈子用户也像我的应用中的用户一样。

我使用ManyToMany属性聆听了self字段。我的应用程序值得在每个用户维护受信任的圈子。

如果可能的话,请给我一些其他选择。

2 个答案:

答案 0 :(得分:1)

经典方法将是:

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)

要在create 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)

享受并邀请我加入您信任的圈子;)

答案 1 :(得分:0)

要向单个表添加多对多关系,请为与单个表具有多对多关系的字段添加一个不同的related_name

例如:

class A(models.Model):
    field1 = models.ManyToManyField('B', related_name='field1')
    field2 = models.ManyToManyField('B', related_name='field2')
    field3 = models.ManyToManyField('B', related_name='field3')

class B(models.Model):
    name = models.CharField(max_length=30, unique=True)