2016-04-22 5 views
0

ребята.Django - Как проверить, содержит ли идентификатор в столбце таблицы?

Я хочу, чтобы проверить в моем шаблоне 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 %} 

Обратите внимание, что этот запрос может быть не очень эффективным, если у вас есть большое количество пользователей/лиг - в этом случае вам может потребоваться переосмыслить дизайн вашей модели.

Смежные вопросы