Django Добавить Q-фильтры для запроса, когда связанный объект существует, Условный запрос - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь запросить мою модель продукта следующим образом:

  • У меня есть модель продукта, связанная с пользователем
  • У моего пользователя может быть связанный магазин и его магазин. может быть неактивным или невидимым

Итак, мои продукты могут быть проданы пользователем, у которого есть магазин, или пользователем, у которого нет магазина; я хочу сделать запрос, добавив эти дополнительные параметры, когда "has_store" условие beign True, как это.

   store_query = ({"seller__user_store__is_active": True,
                  "seller__user_store__is_visible": True}
                 if F("seller__user_store__isnull=False") else {})

И затем добавьте этот запрос к моему фильтрующему предложению:

   Product.objects.filter(Q(is_new=True) & Q(is_active=True), **store_query)

Моя модель продукта также имеет is_new , is_active и другие параметры. Итак, ожидаемое поведение - это что-то вроде добавления Q(seller__user_store__is_visible=True) и Q(seller__user_store__is_active=True), если у продавца товара есть связанный магазин

Надеюсь, все понятно, спасибо вам большое

1 Ответ

1 голос
/ 07 марта 2020

Я думаю, вы делаете вещи слишком сложными. stored_query просто эквивалентно:

Q(seller__user_store=None) | Q(seller__user_store__is_active=True, seller__user_store__is_visible=True)

Действительно, в случае seller__user_store=None, он не должен смотреть на условия продавца, в противном случае он будет. Таким образом, мы можем реализовать это как:

Product.objects.filter(
    Q(seller__user_store=None) | Q(seller__user_store__is_active=True, seller__user_store__is_visible=True),
    is_new=True, is_active=True
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...