【发布时间】:2021-04-07 02:18:24
【问题描述】:
我有两张桌子
class User(models.Model):
id = fields.BigIntField(pk=True)
name = CharField(max_length=100)
tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField(
"models.Tag", related_name="users", through="user_tags"
)
class Tag(models.Model):
id = fields.BigIntField(pk=True)
name = fields.CharField(max_length=100)
value = fields.CharField(max_length=100)
users: fields.ManyToManyRelation[User]
让我们假设这个虚拟数据
#users
bob = await User.create(name="bob")
alice = await User.create(name="alice")
#tags
foo = await Tag.create(name="t1", value="foo")
bar = await Tag.create(name="t2", value="bar")
#m2m
await bob.tags.add(foo)
await alice.tags.add(foo, bar)
现在我想统计同时拥有标签foo 和bar 的用户,在这种情况下是alice,所以应该是1。
以下查询将为我提供单级过滤,但我如何指定 user 在其 tags 中应同时包含 foo 和 bar ?
u = await User.filter(tags__name="t1", tags__value="foo").count()
【问题讨论】:
标签: python python-3.x orm tortoise-orm