如何在 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 的连接不是自动确定的,所以如果你想将一个对等组连接到另一个,你需要手动将这两个组合并为一个,这很快就会变贵。