Я пытаюсь отфильтровать выбор формы, чтобы пользователь мог выбирать игроков только из определенных соревнований. Я изменил функцию _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 форме, так что он может быть выбран только из определенной конкуренции?
Все еще не имеет значения, просто показаны все игроки: '( – Matchday