2014-09-21 97 views
0

我正在嘗試過濾表單選擇,以便用戶只能從某些競賽中選擇玩家。我在形式改變了_init_功能如下,但沒有任何變化Django過濾表單字段的外鍵

forms.py

from django.forms import ModelForm 
from matchdaycentremodel.models import FantasyTeam 
from playerteamstats.models import Player 

class FantasySeasonForm(ModelForm): 
    class Meta: 
     model = FantasyTeam 

    def _init_(self,*args,**kwargs): 
     super(FantasySeasonForm,self)._init_(**kwargs) 
     self.fields['player1'].queryset = playerteamstats.models.Player.objects.filter(team__competition__pk=2) 

相關模型..

models.py(playerteamstats)

class Competition(models.Model): 
    COMP_ID = models.AutoField(primary_key=True) 
    season = models.ForeignKey(Season) #Foreign Key 
    competition_id = models.IntegerField() 
    competition_name = models.CharField(max_length=200) 
    competition_code = models.CharField(max_length=6) 

    def __str__(self): 
     return '%s (%s)' % (self.competition_name, self.season.season_id) #e.g. 'English Barclays Premier League (2014)' 

class Team(models.Model): 
    team_id = models.IntegerField(primary_key=True) 
    competition = models.ForeignKey(Competition) #Foreign Key 
    team_name = models.CharField(max_length=200) 
    def __str__(self): 
     return self.team_name 

class Player(models.Model): 
    player_id = models.IntegerField(primary_key=True) 
    team = models.ForeignKey(Team) #Foreign Key 
    player_name = models.CharField(max_length=140) 
    def __str__(self): 
     return self.player_name 

model s.py(matchdaycentremodel)

class FantasyTeam(models.Model): 
    FANTASY_TEAM_ID = models.AutoField(primary_key=True) 
    player1 = models.ForeignKey(Player, related_name='player1') 
    player2 = models.ForeignKey(Player, related_name='player2') 
    player3 = models.ForeignKey(Player, related_name='player3') 

views.py

@login_required 
def entry(request): 
    fantasyTeamForm = FantasySeasonForm() #Form to store each player in the fantasy team 

    if request.method == 'POST': 
     fantasyTeamForm = FantasySeasonForm(request.POST or None) 
     fantasyTeamForm.fields 
     if fantasyTeamForm.is_valid():   
      fantasyTeamForm.save()    
      return HttpResponseRedirect('/season/entrysuccess') #page on success 


    args = {} 
    args.update(csrf(request)) 

    args['form'] = fantasyTeamForm 

    return render_to_response('entry.html', args, context_instance=RequestContext(request)) 

如何過濾形式的PLAYER1,使其只能從一定的競爭來選擇?

回答

1

init被定義爲def _init_,而應該是(雙下劃線)

而且, crhodes提到,你應該這樣做:

self.fields['player1'].queryset = Player.objects.filter(team__competition_id=2) 

這不是引發異常的原因是,這些代碼行從未執行過。

1

如果你的import語句是正確的,

self.fields['player1'].queryset = playerteamstats.models.Player.objects.filter(team__competition__pk=2) 

不應該

self.fields['player1'].queryset = Player.objects.filter(team__competition__pk=2) 
+0

仍然沒有區別,只顯示所有玩家:'( – Matchday 2014-09-21 13:22:57