"lists" 列表中的 Django 过滤器查询集

Django filter queryset on list of "lists"

请原谅标题的措辞,也许这不是正确的表达方式,但我想不出更好的表达方式。

我有一个名为 People 的模型,通过某种方式识别一群人,我想通过了解他们的城镇、街道和房屋从数据库中获取这些人,然后为他们查询数据库。

class People(models.Model):
    town = models.ForeignKey(Town, on_delete=models.CASCADE)
    street = models.ForeignKey(Street, on_delete=models.CASCADE)
    house = models.ForeignKey(House, on_delete=models.CASCADE)

我可以使用 People.objects.get(...) 如下所示一一获取它们,但是当我需要访问许多时,由于数据库连接的打开和关闭,它会出现延迟。

result = People.objects.get(town_id=tid, street_id=sid, house_id=hid)

如果我有如下所示的查询列表,代表 tid sidhid,我能否以某种方式在一个数据库事务中完成所有这些?此列表很容易增长到 1000 个条目或更多。

queries = [
    [1, 1, 1]
    [1, 1, 2]
    [2, 1, 1]
    [5, 9, 1]
    [13, 40, 2]
]

如果您需要查询确切的组合,您需要先注释您的查询集以构建三个 id 的串联:

from django.db.models.functions import Cast, Concat
from django.db.models import CharField, Value

queries = [",".join(elem) for elem in queries]
People.objects.annotate(address=Concat(
        Cast('town_id', output_field=CharField()), Value(','),
        Cast('street_id', output_field=CharField()), Value(','),
        Cast('house_id', output_field=CharField()
    )).filter(address__in=queries)