如何找到共享多对多关系的模型类型的所有对象?

How can I find all objects of a model type that share a many-to-many-relationship?

所以,我有两个模型 类,让我们使用 django 文档示例并将它们称为 Person 和 Group。它们以多对多的关系相关——一个人可以在多个组中,而组可以有多个人。如果我只有一个 Person 对象,找到与他们共享一个组的所有其他 Person 的最佳方法是什么?

编辑:这是我的代码的松散布局:

class Group(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Person(models.Model):
    name = models.CharField(max_length=50)
    {various other fields}
    groups = models.ManyToManyField(Group)
class Person(models.Model):
    name = models.CharField(max_length=255)
    details = models.TextField(default='', blank=True)
    status_id = models.PositiveSmallIntegerField(default=0)
    active = models.PositiveSmallIntegerField(default=1)

class Group(models.Model):
    group_name = models.CharField(max_length=255)
    persons = models.ForeignKey(
        'Person',
        on_delete=models.CASCADE,
        related_name='group_set'
    )

...

in_group_count = (
    Person.objects
    .filter(status_id__in=[2, 1], active=1)
    .annotate(order_num=Count('group_set'))
    .filter(order_num__gt=0).count()
)
not_in_group_count = (
    Person.objects
    .filter(status_id__in=[2, 1], active=1)
    .annotate(order_num=Count('group_set'))
    .filter(order_num__lte=0).count()
)
in_group_value = (
    Person.objects
    .filter(status_id__in=[2, 1], active=1)
    .annotate(order_num=Count('group_set'))
    .filter(order_num__gt=0).values()
)

我不知道这两个模型中哪个模型包含 ManyToMany 字段。它在您的 "Group" 模型中应该有效("person" 作为您的参考人):

qs = Person.objects.filter(group__in=person.group_set.all()).exclude(id=person.pk).distinct()

给你所有的 Person 对象共享一个没有双打的组。如果 m2m 字段在您的 Person 模型中,这应该可以完成工作

qs = Person.objects.filter(groups__in=person.groups.all()).exclude(id=person.pk).distinct()