Django if else模板标签查询集不对

时间:2017-02-12 22:00:55

标签: python django templatetags

我希望在用户不关注项目时显示“关注”按钮,并在用户关注该按钮后更新按钮。

我尝试使用以下模板标记,但它始终返回true。

以下是人们可以关注的项目模型,其中包括当前关注此项目的关注者列表。

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

这些是我尝试过的模板标签,但它总是返回“关注”。

{% 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 个答案:

答案 0 :(得分: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()访问关注特定团队的用户。

答案 1 :(得分:0)

尝试将request.user更改为仅用户。

request.user存在于视图代码中。然而,系统会自动向用户提供模板代码。

request.user是Null还是None,我不确定是哪一个,但它基本上意味着无论何时在查询中搜索它,从模板中都不会存在。因此,不要求任何事情都是真的。

修改:此外,如果您要提供用户&#39;从视图中明确地模板,尝试将其更改为其他内容。如上所述,模板代码自动为用户提供。它不提供request.user。在大多数情况下,不存在的变量只会以静默方式失败,并为其特定的预设数据类型返回适当的默认值。