2014-09-21 2 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 

модель 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

Если операторы импорта являются правильными,

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

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