我有一个通用模型“EmailedItem”引用模型“Item”。
我想循环浏览我的项目列表并打印发送电子邮件的时间。
现在我在做:
items = Item.objects.all()
for item in items:
emailedItem = EmailedItem.objects.get(object_id=item.item_id)
print emailedItem.created
问题是这个例程需要很快运行,并且需要花费大量时间对数据库中的每个项目进行选择。
有更好的方法吗?
非常感谢,
答案 0 :(得分:0)
使用only仅选择查询中的指定字段(包括Item和EmailedItem)
答案 1 :(得分:0)
编辑回答纪念
使用values_list
创建ID列表,然后按__in
items = Item.objects.all()
dict_of_emailtedItems = {i.object_id: i for i in EmailedItem.objects.filter(object_id__in=items.values_list('item_id', flat=True))}
for item in items:
emailedItem = dict_of_emailtedItems[item.id]
print emailedItem.created
这将只生成2个查询到DB而不是1 + N,其中N是items
的数量