2016-04-22 3 views
0

Jungs.Django - Wie überprüft man, ob die ID in einer Tabellenspalte enthalten ist?

Ich möchte meine django Vorlage prüfen, ob request.user in irgendeiner Zeile der Spalte Benutzer in meiner Tabelle existiert LeagueMember. Die Art, wie ich sie gefunden habe, funktioniert nicht.

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

Dieser Fehler in dieser Zeile ist:

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

geht immer an ELSE Block

Danke alle

Antwort

0

league.leaguemember_league werden Sie kein LeagueMember Objekt geben, sondern ein RelatedManager Objekt (so können Sie keine user Eigenschaft darin finden , daher wird Ihre Vorlagenlogik nicht funktionieren).

Was Sie versuchen, ist zwei Ebenen tief in Ihrer Beziehung gehen (League ->LeagueMember ->User). Sie können diese Art von Logik in Ihrer Vorlage nicht einfach ausführen und müssen dies wahrscheinlich stattdessen in Ihrem Ansichtscode tun. Zum Beispiel:

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

Sie brauchen dann alle Logik der Vorlage ändern diese neue Struktur zu verwenden:

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

Im if Block können Sie dann tun:

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

Beachten Sie, dass Diese Abfrage ist möglicherweise nicht sehr effizient, wenn Sie viele Benutzer/Ligen haben. In diesem Fall müssen Sie möglicherweise Ihren Modellentwurf überdenken.

Verwandte Themen