django - 将 Django ORM 迭代放入一个请求

标签 django postgresql django-orm

我有三个模型:

class Box(models.Model):
    name = models.TextField(blank=True, null=True)


class Toy(models.Model):
    box = models.ForeignKey(Box, related_name='toys')


class ToyAttributes(models.Model):
    toy = models.ForeignKey(Toy)
    color = models.ForeignKey(Color, related_name='colors')

并列出:

pairs = [[10, 3], [4, 5], [1, 2]]

其中每个值都是一对或框和颜色 id。 我需要过滤此数据并返回包含所需颜色玩具的盒子对象。

现在我这样做:

for n in list:
    box = Box.objects.filter(id=n[0], toys__colors=n[1])
    if box.exist():
        ...

但是长列表需要很多时间,据我了解是因为有多个SQL请求。我可以让它更快吗?是否可以通过一个请求只获得需要的盒子,我该怎么做?谢谢!

最佳答案

你应该看看 django Q function并在循环中构建查询,像这样向 Q 添加值

query = Q()
for box_id, toy_color in [[10, 3], [4, 5], [1, 2]]:
   query |= Q(Q(id=box_id) & Q(toys__colors=toy_color))
Box.objects.filter(query)

关于django - 将 Django ORM 迭代放入一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109360/

相关文章:

django - ValueError : Cannot assign "' auth. 用户 '": "Token.user”

python - 如何避免在 Django 中导入时访问数据库?

python - SQL 重新格式化/更改 TableView ,将重复内容作为列

django - 通过 Django 中的模型表单保存多对多数据

python - 在 Django ORM 中旋转数据和复杂注释

django - 将 Django/South/PostgreSQL 从按需计算的汇总值迁移到数据库中维护的汇总值的正确方法是什么?

json - 将附加数据添加到 Django 中的序列化响应

django - Models.DateField 格式问题

postgresql - 使用 docker-compose 在 postgresql 数据库中创建表

postgresql - 在 VPC 中访问 RDS posgtgreSQL?