Django - Фильтр, когда регистр ложен - PullRequest
0 голосов
/ 06 января 2020

У меня есть модель Article. Это должно быть отфильтровано. Вот условие:

Если запрос НЕ является автором, все статьи с pub_date lte now будут видны.

Если запрос сделан автором, все статьи с pub_date lte now будут видны ПЛЮС статьи от авторов (независимо от pub_date).

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


Я думал, что смогу комментировать статьи, а затем каким-то образом отфильтровать их, но я не знаю, как продолжить или как это сделать. Это. authors является полем m2m.

articles = articles.annotate(
                can_see=Case(
                    When(authors__id__in=[request.user.id], then=Value(True)),
                    default=False,
                    output_field=BooleanField()
                )
            )

1 Ответ

1 голос
/ 07 января 2020

Из того, что я могу вывести из вашего кода, вы можете использовать простой OR в своем фильтре. По сути, вы бы сделали что-то вроде:

from django.utils import timezone
from django.db.models import Q

now = timezone.now()
to_show = articles.filter(Q(authors__id=request.user.id) | Q(pub_date__lte=now))

Это выполняет логический или между критериями буксировки, включенными в Q() объекты. Этот запрос говорит: «Приведите каждую статью, в которой есть автор, чей идентификатор совпадает с идентификатором пользователя в запросе или чья дата публикации меньше или равна текущей дате»

Пожалуйста, посмотрите на документация по запросу базы данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...