Django过滤器限制对象

时间:2017-05-23 04:07:48

标签: django django-queryset

抱歉这个愚蠢的问题。

我不知道在哪里可以找到此解决方案或任何关键字参考。

比方说,我有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]

但是这个查询似乎很慢。

有没有更好的解决方案?

感谢。

2 个答案:

答案 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