Фильтруйте набор запросов 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
модель раздел документации .