Подтвердить что ты не робот

Шаблон django if или statement

В основном, чтобы сделать это быстро и просто, я ищу, чтобы запускать условное выражение XOR в шаблоне django. Прежде чем вы спросите, почему бы мне просто не сделать это в коде, это не вариант.

В основном мне нужно проверить, находится ли пользователь в одном из двух объектов "много-ко-многим".

req.accepted.all 

и

req.declined.all

Теперь они могут быть только в одном или другом (отсюда условное условие XOR). От взгляда на документы, единственное, что я могу выяснить, это следующее

{% if user.username in req.accepted.all or req.declined.all %}

Проблема, с которой я столкнулась, заключается в том, что если user.username действительно появляется в req.accepted.all, то он ускользает от условного, но если он в req.declined.all, то он будет следовать условному предложению.

Я что-то пропустил?

4b9b3361

Ответ 1

and имеет более высокий приоритет, чем or, поэтому вы можете просто написать разложенную версию:

{% if user.username in req.accepted.all and user.username not in req.declined.all or
      user.username not in req.accepted.all and user.username in req.declined.all %}

Для эффективности используйте with, чтобы пропустить переоценку запросов:

{% with accepted=req.accepted.all declined=req.declined.all username=user.username %}
    {% if username in accepted and username not in declined or
          username not in accepted and username in declined %}
    ...
{% endwith %}

Ответ 2

Перефразируемый ответ от принятого:

Чтобы получить:

{% if A xor B %}

делать:

{% if A and not B or B and not A %}

Это работает!