Django, если еще шаблон тега queryset не подходит

Я хочу отобразить кнопку "следовать", когда пользователь не следует за проектом, и обновить кнопку, как только пользователь последует за ним.

Я пытался использовать следующие теги шаблона, но он всегда возвращал истину.

Вот модель для проектов, которым могут следовать люди, следующие включают список подписчиков, которые в настоящее время следуют за этим проектом.

class Team(models.Model):
    following = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        related_name='followers',
        blank=True,
    )

Это теги шаблонов, которые я пробовал, но они всегда возвращают "Follow".

{% if not request.user in user.followers.all  %}
    <div class="progress-stats">
        <a href="{% url 'teams:follow' team.id %}">Follow</a>
    </div>
{% endif %}
{% if request.user in user.followers.all %}
     <div class="progress-stats">
         <a href="{% url 'teams:unfollow' team.id %}">Unfollow</a>
     </div>
{% endif %}

2 ответа

Решение

Вы хотите проверить, есть ли пользователь в команде following:

<div class="progress-stats">
  {% if request.user in team.following.all %}
    <a href="{% url 'teams:unfollow' team.id %}">Unfollow</a>
  {% else %}
    <a href="{% url 'teams:follow' team.id %}">Follow</a>
  {% endif %}
</div>

Что касается именования полей, это будет иметь больше смысла:

class Team(models.Model):
    followers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='teams', blank=True)

Теперь пользователи, которые следуют за данной командой, могут быть доступны через team.followers.all()и команды данного пользователя через user.teams.all(),

Попробуйте изменить request.user только на пользователя.

request.user существует в коде представлений. Однако система автоматически предоставляет пользователю код шаблона.

Аргумент request.user имеет значение Null или None, я не уверен, какой именно, но в основном это означает, что каждый раз, когда вы будете искать его в запросе по шаблону, его там не будет. Таким образом, не request.user во всем, что всегда будет правдой.

Изменить: Кроме того, если вы предоставляете "пользователь" для шаблона явно из представления, попробуйте изменить его на что-то еще. Как я уже говорил выше, код шаблона автоматически предоставляет пользователю. Он не предоставляет request.user. Несуществующие переменные в большинстве случаев просто молча завершаются сбоем и возвращают соответствующее значение по умолчанию для их конкретного предполагаемого типа данных.

Другие вопросы по тегам