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. Несуществующие переменные в большинстве случаев просто молча завершаются сбоем и возвращают соответствующее значение по умолчанию для их конкретного предполагаемого типа данных.