2

我有一个场景。

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

我在这里感到困惑。

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

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

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

4

2 回答 2

2

经典方法将是:

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)

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

于 2013-03-04T08:40:25.047 回答
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)
于 2020-01-05T08:49:28.187 回答