Фильтруйте набор запросов django на основе наличия отношения внешнего ключа

Итак, у меня есть две модели.

class Post(models.Model): 
    id = models.OidField('object id', unique=True)

class ArchivedFlag(models.Model):
    post = models.ForeignKey(post,
                         on_delete=models.CASCADE,
                         related_name='archived_flag')
    user = models.ForeignKey(User,
                         on_delete=models.CASCADE,
                         related_name='archives')

В файле views.py я сформировал список всех постов по некоторому критерию, 'plist'.

Я хочу отфильтровать список на основе постов, которые НЕ имеют отношения с объектом ArchivedFlag. В основном модель ArchivedFlag является инструментом скрытия определенных постов.

Как я могу это сделать? Я пытаюсь сделать что-то вроде

plist = plist.exclude(models.ForeignKey.Post exists) 

но я не уверен в точном синтаксисе.

Вы можете исключить Post объекты, для которых существует ArchivedFlag с помощью:

Post.objects.exclude(archived_flag__isnull=False)

или проще с помощью простого фильтра:

Post.objects.filter(archived_flag=None)

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .

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