2016-04-22 130 views
0

夥計。Django - 如何檢查id是否包含在表列中?

我想在我的Django模板檢查,如果request.user列用戶的某些行存在在我的表LeagueMember。我發現的方式不起作用。

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

總是轉到ELSE塊

謝謝大家

回答

0

league.leaguemember_league不會給你一個LeagueMember對象,但一個RelatedManager對象(所以你不能找到它user屬性,因此你的模板邏輯將不起作用)。

你要做的是在你的關係中深入兩個層次(League - >LeagueMember - >User)。你不能輕易地在你的模板中做這種邏輯,而可能需要在你的視圖代碼中進行。例如:

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

然後,您需要修改所有的模板邏輯來使用這個新的結構:

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

if塊,那麼你可以這樣做:

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

注意如果您擁有大量用戶/聯盟,則此查詢可能效率不高 - 在這種情況下,您可能需要重新考慮模型設計。