Я не могу придумать, как включить логическое условие.Возможно, другие могут ответить на этот вопрос лучше.
Как насчет того, чтобы думать немного по-другому?Если вы не возражаете против выполнения двух запросов, вы можете отфильтровать свои статьи в зависимости от того, проголосовал ли зарегистрированный в данный момент пользователь или нет.Примерно так:
all_articles = Article.objects.all()
articles_user_has_voted_on = all_articles.filter(vote__caster =
request.user).annotate(total_score=Sum('vote__score'))
other_articles = all_articles.exclude(vote__caster =
request.user).annotate(total_score=Sum('vote__score'))
Обновление
После некоторых экспериментов мне удалось выяснить, как добавить логическое условие для столбца в том же модель (в данном случае Article
), но не для столбца в другой таблице (Vote.caster
).
Если Article
имел столбец caster
:
Article.objects.all().extra(select = {'already_voted': "caster_id = %s" % request.user.id})
В текущем состоянии это может применяться для модели Vote
:
Vote.objects.all().extra(select = {'already_voted': "caster_id = %s" % request.user.id})