2017-02-12 2 views
0

Я хочу отобразить кнопку «следовать», когда пользователь не выполняет проект и обновляет кнопку после того, как пользователь следует за ней.Django if else template tag queryset not right

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

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

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 %} 
+0

Что такое 'user' здесь? Вы уверены, что это не то же самое, что 'request.user'? –

ответ

1

Вы хотите проверить, если пользователь находится в команды 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().

+0

работал отлично, запрос иногда путается haha –

0

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

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

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

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