Как улучшить огромный запрос Django "многие-ко-многим" для повышения скорости работы Django?

У меня есть такой набор запросов, который мне нужно оптимизировать, потому что я думаю, что этот набор запросов замедляет производительность сайта. Поле user_wishlist является реляционной связью БД "многие-ко-многим" с моделью/таблицей Account. Как мне это сделать?

product_wishlist_store_list = []  
non_paged_products = Product.objects.prefetch_related('user_wishlist').select_related('category').filter(is_available=True).order_by('created_date')
    for product in non_paged_products.iterator():
    # Get User Wishlist
        try:
            product_wishlist = product.user_wishlist.filter(id=request.user.id).exists()
            if product_wishlist:
                product_wishlist_store_list.append(product.id)
        except ObjectDoesNotExist:
            pass

Когда я включаю лог с целью DEBUG в Django, я вижу, что есть почти тысяча (0.000) SELECT запросов INNER JOIN. 0.000 означает отсутствие удара по базе данных или это так? Тем не менее, видеть тысячу подобных запросов меня пугает - я чувствую, что этот код настолько неэффективен. Так ли это?

Почему бы просто не использовать здесь простой ORM-запрос и не сделать список значений в конце, это значительно сократит код и время выполнения запроса.

    product_wishlist_store_list = Product.objects.filter(
        is_available=True, 
        user_wishlist__id=id=request.user.id
    ).order_by('created_date').distinct().values_list("id", flat=True)

Что-то вроде этого должно сработать для вас.

Вернуться на верх