2016-04-22 11 views
0

人。Django - IDがテーブルの列に含まれているかどうかを確認する方法?

は私がからrequest.userが私のテーブルLeagueMemberの列ユーザーのいくつかの行に存在する場合、私のDjangoテンプレートにチェックしたいです。私が見つけた方法は働いていません。

views.py

@login_required(login_url='login/') 
def search_leagues(request): 
if request.method == 'POST': 
    return redirect('join_league') 

leagues = League.objects.all() 
return render(request, 'search_leagues.html', { 'allleagues': leagues }) 

model.py

class League(models.Model): 
    league_owner = models.ForeignKey('auth.User') 
    league_name = models.CharField(max_length=30) 
    creation_date = models.DateTimeField() 

    def is_member(self): 
     member = LeagueMember.objects.get(league=self) 
     if member: 
      return True 
     else: 
      return False 

class LeagueMember(models.Model): 
    league = models.ForeignKey('League', related_name='leaguemember_league') 
    user = models.ForeignKey('auth.User') 

search_leagues.html

{% for league in allleagues %} 
 
<tr> 
 
    <td class="center">{{ league.league_name }}</td> 
 
    <td class="center">{{ league.leaguemember_league.count}}/{{ league.leaguesettings_league.league_number_teams }}</td> 
 
    <td class="center">{{ league.leaguesettings_league.league_eligibility }}</td> 
 
    <td class="center">{{ league.leaguesettings_league.league_lifetime }}</td> 
 
    {% if request.user in league.leaguemember_league.user %} 
 
    DO SOMETHING!!! 
 
    {% else %} 
 
    {% if league.leaguemember_league.count < league.leaguesettings_league.league_number_teams %} 
 
    {% if league.leaguesettings_league.league_eligibility == "Private" %} 
 
    <form method="post" action="{% url 'joinleague' pk=league.id %}"> 
 
     <td class="center"><a href="{% url 'joinleague' pk=league.id %}" class="btn btn-mini btn-warning">Soliticar</a></td> 
 
    </form> 
 
    {% elif league.leaguesettings_league.league_eligibility == "Public" %} 
 
    <form method="post" action="{% url 'joinleague' pk=league.id %}"> 
 
     <td class="center"><a href="{% url 'joinleague' pk=league.id %}" class="btn btn-mini btn-info">Entrar</a></td> 
 
    </form> 
 
    {% endif %} 
 
    {% endif %} 
 
    {% endif %} 
 
</tr> 
 
{% endfor %}

このエラーこの行である:

{% if request.user in league.leaguemember_league.user %} 

は常に

は(そう、あなたがそれにuserプロパティを見つけることができないすべての

答えて

0

league.leaguemember_leagueはあなたにLeagueMemberオブジェクトが、RelatedManagerオブジェクトを与えることはありませんありがとうELSEブロックに行きますしたがって、テンプレートロジックは機能しません)。

あなたがしようとしていることは、関係(League - >LeagueMember->User)の2つのレベルの深さになります。テンプレートでこの種のロジックを簡単に実行することはできず、代わりにビューコードで行う必要があります。たとえば、次のようにすることを

{% if request.user in league_data.users %} 

注:あなたが行うことができますifブロックで

{% for league_data in allleagues %} 
# Replace league with league_data.league in all the template logic below this 

league_data = [] 
for league in League.objects.all(): 
    league_data.append({ 
     'league': league, 
     'users': User.objects.filter(leaguemember__league=league) # This gives you all the users that are related to this league 
    }) 

return render(request, 'search_leagues.html', { 'allleagues': league_data}) 

あなたは、この新しい構造を使用するために、すべてのテンプレートのロジックを変更する必要があります多数のユーザー/リーグがある場合、このクエリはあまり効率的ではないかもしれません。その場合、モデルデザインを再考する必要があります。

関連する問題