나는이 같은 주제에 관해 많은 질문이 있지만 하나의 지점에서 혼란 스럽다는 것을 알고있다. 의도적으로 두 개의 ModelChoiceFields를 폼에 표시하지만 게임 모델에 직접 연결하지는 않습니다.장고는 ModelChoiceField의 쿼리 세트를 필터링합니다. 내가 뭘 잘못 했습니까?
내가 검색어 세트 필터를 설정할 때입니다 혼란 스러워요 Views.py
def game_add(request, match_id):
game = Game()
try:
match = Match.objects.get(id=match_id)
except Match.DoesNotExist:
# we have no object! do something
pass
game.match = match
# get form
form = AddGame(request.POST or None, instance=game)
form.fields['home_team'].queryset = Player.objects.filter(team=match.home_team)
# handle post-back (new or existing; on success nav to game list)
if request.method == 'POST':
if form.is_valid():
form.save()
# redirect to list of games for the specified match
return HttpResponseRedirect(reverse('nine.views.list_games'))
...
class AddGame(forms.ModelForm):
won_lag = forms.ChoiceField(choices=[('1','Home') , ('2', 'Away') ])
home_team = forms.ModelChoiceField(queryset=Player.objects.all())
away_team = forms.ModelChoiceField(queryset=Player.objects.all())
class Meta:
model = Game
fields = ('match', 'match_sequence')
forms.py :
나는 다음 있습니다. 먼저 내가 시도 :
form.home_team.queryset = Player.objects.filter(team=match.home_team)
하지만 난
AttributeError at /nine/games/new/1
'AddGame' object has no attribute 'home_team'
...
그래서 난 다음에 변경이 오류가 발생했습니다 :
form.fields['home_team'].queryset = Player.objects.filter(team=match.home_team)
지금 (다른 게시물을 읽은 후) 그것을 잘 작동합니다 .
제 질문은 두 줄의 차이점은 무엇입니까? 왜 두 번째 작품은 처음 작품이 아닌가? 나는 그것이 초보자 (나는 하나)라는 것이 확실하지만 나는 당황 스럽다.
도움을 주시면 감사하겠습니다.
form = AddGame(request.POST or None, instance=game)
그래서 form
클래스 AddGame
의 양식 개체입니다 (사이드 참고 : 당신이 혼동을 피하기 위해 AddGameForm
로 이름을 변경해야합니다)