Django过滤多对多关系中的对象

时间:2017-05-18 12:21:29

标签: python django orm

我在尝试过滤多对多关系时遇到了问题。

这是我的models.py:

class Member(models.Model):
    name = models.CharField(max_length=255)

class Talk(models.Model):
    members = models.ManyToManyField(Member)

我希望得到两位成员参加的对话。

以下是我的数据:

{
    "pk": 2,
    "members": [
        36384,
        12626,
        48397
    ],
},
{
    "pk": 3,
    "members": [
        36384,
        12626,
        -89813,
        48397
    ],
}

我希望得到两个指定成员参与的对话。我的查询如下:

Talk.objects.filter(members__in=[12626, -89813])

我得到的结果如下:

<QuerySet [<Talk: 2>, <Talk: 3>, <Talk: 3>]>

如何才能使结果成为这个?

<Talk: 3>

注意:它是指定成员参与的唯一对话

由于

1 个答案:

答案 0 :(得分:2)

尝试下面的django查询:

from django.db.models import Q

Talk.objects.filter(
    Q(members__id=12626) & Q(members__id=-89813)
)