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

Django if else template tag queryset not right

我想在用户未关注项目时显示 "follow" 按钮,并在用户关注后更新按钮。

我尝试使用以下模板标签,但它总是返回 true。

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

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

这些是我试过的模板标签,但总是 returns "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 %}

您想检查用户是否在团队 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 永远是真的。

编辑:此外,如果您从视图中明确向模板提供 'user',请尝试将其更改为其他内容。正如我上面所说,模板代码自动提供用户。它不提供 request.user。 Non-existing 变量,在大多数情况下,只会静静地失败,并且 return 其特定的预设值 data-type.

的适当默认值