2017-02-12 3 views
0

ユーザーがプロジェクトをフォローしていないときに「フォロー」ボタンを表示し、ユーザーがフォローした後にボタンを更新したい。Django else ifテンプレートタグクエリーセットが正しくない

次のテンプレートタグを使用しようとしましたが、常にtrueを返していました。

以下は、このプロジェクトに現在従っているフォロワーのリストを含む、従業員がフォローできるプロジェクトのモデルです。

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

これらは私が試したテンプレートタグですが、常に「フォロー」を返します。

<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> 

限り、フィールドの命名が行くように、これはより理にかなって:あなたは、ユーザーがチームのfollowingであるかどうかを確認したい

{% 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

ここでは「ユーザー」とは何ですか? 'request.user'と同じではないと確信していますか? –

答えて

1

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

、指定されたチームに続くユーザーは、team.followers.all()でアクセスし、特定のユーザーのチームにはuser.teams.all()でアクセスできます。

+0

が完璧に機能し、クエリが混乱することがある –

0

request.userを単なるユーザーに変更してみてください。

request.userがビューコード内に存在します。しかし、システムは自動的にユーザーをテンプレートコードに提供します。

request.userはNullかNoneかのどちらかですが、わからないのですが、基本的にはクエリの中でそれをテンプレートから検索するたびに、そこには存在しません。したがって、常にtrueになるものは何でもrequest.userではありません。

編集:ビューから明示的にテンプレートに「ユーザー」を提供している場合は、別のものに変更してみてください。上で述べたように、テンプレートコードは自動的にユーザーを提供します。それはrequest.userを提供しません。存在しない変数は、ほとんどの場合、ただ静かに失敗するだけで、特定の事前設定されたデータ型に適切なデフォルト値を返します。

関連する問題