python - django ORM 中的多个查询

标签 python django django-orm

我有以下用户模型,

class User(AbstractBaseUser, PermissionsMixin, Base):
    email = models.EmailField(db_index=True, unique=True, max_length=255)
    mobile = PhoneNumberField(null=True)

和房间模型,

class Room(Base):
    name = models.CharField(db_index=True, unique=True, max_length=255)
    members = models.ManyToManyField(User)

我想检查是否存在一个房间,其中a和b都是成员。我试过这个,

PrivateRoom.objects.filter(members__id=first.id, members__id=second.id).exists()

这给了我一个错误关键字参数重复。 有人可以帮我查询一下吗?

最佳答案

您需要将其拆分为两个 .filter(..) 调用:

PrivateRoom.objects.filter(members__id=first.id).filter(members__id=second.id).exists()

不仅因为您不能在 Python 函数调用中使用相同命名参数,而且如果这是可能的(对于 Q 对象),则意味着您正在寻找 id 均等于 first.idsecond.id 的单个成员。

这不是您想要的:您需要两个不同的 JOIN:一个用于第一个成员,一个用于第二个成员。

关于python - django ORM 中的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53356353/

相关文章:

python - 如何结合单索引和多索引 Pandas DataFrames

python - 如何获取 limit_choices_to (Django) 中实体的实例?

python - 如何检查字符串是否包含 Django ORM 查询中列表的任何一个值

Django自定义加载外键

python - configparser读写

Python 3 urllib.request 数据挣扎

python - 使用 null=False 保存空字段时不会引发异常 - Django

python - cloudsql 数据库与 django on 'new' 灵活的谷歌应用引擎

python - 从查询集中构建最高价格列表的最有效方法?

python - CloudDataflow 不能使用 "google.cloud.datastore"包?