如何在 Django 中创建对等组?
How to create Peer Groups in Django?
如何在 Django 中创建对等组?
我试过以下方法:
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
peers = models.ManyToManyField("self", blank=True, null=True)
现在有 3 个人(A、B、C)。
A 连接到 B。
B连接到C.
A 没有连接到 C。
问题:
A应该也和C相连,因为B和C是相连的
我该怎么做?
您可以像这样将人员添加到组中:
class Group(models.Model):
pass
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
group = models.ForeignKey(to=Group, related_name="members", blank=True, null=True)
然后,您可以将 class 人的各种扩展权授予 access/manage 对等方:
@property
def peers(self):
return self.group.members
def add_peer(self, person: Person):
# This method assumes that
# 1. The person 'self' is already in an existing group
# 2. The person 'person' is not yet in a group.
# Edge cases like both persons already being in a group,
# or person B being in a group while person A is not require some additional checks.
self.group.members.add(person)
这个解决方案的缺点是 A 到 C 的连接不是自动确定的,所以如果你想将一个对等组连接到另一个,你需要手动将这两个组合并为一个,这很快就会变贵。
如何在 Django 中创建对等组?
我试过以下方法:
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
peers = models.ManyToManyField("self", blank=True, null=True)
现在有 3 个人(A、B、C)。
A 连接到 B。
B连接到C.
A 没有连接到 C。
问题:
A应该也和C相连,因为B和C是相连的
我该怎么做?
您可以像这样将人员添加到组中:
class Group(models.Model):
pass
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
group = models.ForeignKey(to=Group, related_name="members", blank=True, null=True)
然后,您可以将 class 人的各种扩展权授予 access/manage 对等方:
@property
def peers(self):
return self.group.members
def add_peer(self, person: Person):
# This method assumes that
# 1. The person 'self' is already in an existing group
# 2. The person 'person' is not yet in a group.
# Edge cases like both persons already being in a group,
# or person B being in a group while person A is not require some additional checks.
self.group.members.add(person)
这个解决方案的缺点是 A 到 C 的连接不是自动确定的,所以如果你想将一个对等组连接到另一个,你需要手动将这两个组合并为一个,这很快就会变贵。