我不知道在哪里可以找到此解决方案或任何关键字参考。
比方说,我有2个模型Place和Tips,以及:
# list of place id
place_id_list = [...]
如何过滤place_id_list上的提示,该提示仅为每个地点检索< = 5提示对象
以下是模型:
class Place:
...
class Tip:
# object_id is id of place
object_id = models.PositiveIntegerField(editable=False)
content_type = models.ForeignKey(ContentType)
现在,我只使用 for loop ,如:
tip_list = []
for place_id in place_id_list:
tip_list += Tip.objects.filter(object_id=place_id, content_type...)[0:5]
但是这个查询似乎很慢。
有没有更好的解决方案?
感谢。
答案 0 :(得分:2)
tip_list = []
for place_id in place_id_list:
tip_list += Tip.objects.filter(object_id=place_id, content_type...)[:5]
没有比这更好的方法了,因为你知道django是懒惰的加载器,除非需要新的对象,否则不会命中数据库,
答案 1 :(得分:0)
尝试以下查询:
tip_list =Tip.objects.filter(object_id__in=place_id_list, content_type...)[:5]
参考链接:
https://docs.djangoproject.com/en/dev/topics/db/queries/#the-pk-lookup-shortcut