我有三个模型:
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/