Как использовать 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 ForeignKey
s, ManyToManyField
s 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')