我有一个场景。
我的应用程序中有很多用户,每个人都有自己的(Trusted Circle)
.Trusted Circle 有点类似于密友。
我在这里感到困惑。
实现每个用户的受信任圈子的最佳方法是什么。受信任圈子用户也像我的应用程序中的用户。
我听说过ManyToMany
带有self
属性的字段。值得在我的应用程序中使用它来维护每个用户的信任圈。
如果可能的话,请给我一些其他的选择。
我有一个场景。
我的应用程序中有很多用户,每个人都有自己的(Trusted Circle)
.Trusted Circle 有点类似于密友。
我在这里感到困惑。
实现每个用户的受信任圈子的最佳方法是什么。受信任圈子用户也像我的应用程序中的用户。
我听说过ManyToMany
带有self
属性的字段。值得在我的应用程序中使用它来维护每个用户的信任圈。
如果可能的话,请给我一些其他的选择。
经典方法将是:
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)
享受并让我加入您信任的圈子;)
要将多对多关系添加到单个表,请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)