【问题标题】:How to make queryset in django?如何在 django 中创建查询集?
【发布时间】:2020-02-17 19:09:40
【问题描述】:
item_list = Item.objects. filter(location_id=location_id)
image_list = Image.objects.filter(?????)
class Image(models.Model):
item = models.ForeignKey(Item, models.on_delete=CASCADE)
我只想获取第一个查询集 item_list 中 item_id 的图像
【问题讨论】:
标签:
django
python-3.x
django-views
【解决方案1】:
您可以使用__in lookup [Django-doc]:
image_list = Image.objects.filter(<b>item__in=item_list</b>)
对于某些数据库,例如 MySQL,有时不擅长优化非动态子查询,最好先物化Items 的列表,然后传递一个Django 中的 id 列表:
image_list = Image.objects.filter(item__in=<b>list(</b>item_list<b>)</b>)
这在文档中指定为:
谨慎使用嵌套查询并了解您的数据库服务器的性能特征(如有疑问,请进行基准测试!)。一些数据库后端,尤其是 MySQL,不能很好地优化嵌套查询。在这些情况下,提取值列表然后将其传递给第二个查询会更有效。