Как использовать Lookups, охватывающие отношения в Django

У меня есть модели User, Store, Warehouse и Product. Мне нужно получить все товары со склада. У пользователя много магазинов. У одного магазина много складов. А продукт с одним и тем же идентификатором (SKU) может храниться на разных складах.

    def get_queryset(self):
        return Product.objects.filter(
            warehouse__store__user_id=self.request.user.pk)\
            .order_by('-offer_id')

Правильно ли я делаю, что фильтрую продукты таким образом?

Правильно ли я делаю, что фильтрую товары таким образом?

That depends on the value given to the related_query_name=… parameters [Django-doc] of the ForeignKeys, ManyToManyFields and OneToOneField. If you do not specify a value for the related_query_name=…, it will take the value you pass to the related_name=… parameter [Django-doc], and if you did not specify such paramete,r it will fallback to the name of the model in lowercase.

Если существует форма ForeignKey или ManyToManyField, например, от Warehouse до Product, и вы не указали , то в качестве имени запроса будет взято related_query_name=…, и вы сможете проследить за отношением с помощью поиска related_name=…. Вы можете выполнить рекурсию и таким образом выбрать отношение из хранилища.warehouse

Запрос выглядит корректно, однако вы можете упростить его до:

def get_queryset(self):
    return Product.objects.filter(
        warehouse__store__user=self.request.user
    ).order_by('-offer_id')
Вернуться на верх