Django在几个表中创建相同的查询

时间:2017-06-15 18:19:39

标签: django python-2.7 django-models

我正在对3个表进行相同的查询,然后将所有表一起进行。 但我觉得我消耗了大量的资源,因为它们有点复杂的查询,我希望能够为所有三个表创建一个查询,这在Django中是否可行?

我知道在SQLALCHEMY中有类似的东西:

SQLAlchemy How to joiun several tables by one query

代码:

# Review Dish
recent_dish_review = restaurant.models.DishReview. \
                               objects.filter(user_id__in=id_follows,
                                              created_at__lte=timezone.now(),
                                              created_at__gte=days
                                              ).order_by('-created_at')[:limit]

# Review Restaurant
recent_restaurant_review = restaurant.models.RestaurantReview. \
                               objects.filter(user_id__in=id_follows,
                                              created_at__lte=timezone.now(),
                                              created_at__gte=days
                                              ).order_by('-created_at')[:limit]

# User Like Dish
recent_like_dish = restaurant.models.DishesLikes. \
                               objects.filter(foodie_id__in=id_follows,
                                              created_at__lte=timezone.now(),
                                              created_at__gte=days
                                              ).order_by('-created_at')[:limit]

return list(sorted(chain(recent_restaurant_review, recent_dish_review, recent_like_dish))

1 个答案:

答案 0 :(得分:1)

使用python的zip方法。

single_queryset = zip(recent_restaurant_review, recent_dish_review, recent_like_dish)
return single_queryset

注意:所有查询集都应该具有相同的对象计数。

您可以像下面一样迭代zip查询集:

form restaurant, dish, like in single_queryset:
    print restaurant, dish, like