私は、フォームLeagueTransferFormに基づいて、LeagueTransferViewというFormViewを持っています。Django 1.9 FormViewがget_context_dataに到達しない
テンプレートにレンダリングするプレーヤーを追加するために、get_context_dataをオーバーライドしようとしています。
しかし、get_context_dataには決して達しません。 DetailView、ListViewなどの他のビューで正常に動作しています...
私は何かが欠けていますか?
私の設定の下に表示
class LeagueTransferView(FormView):
template_name = 'hockey/league/transfer_market.html'
form_class = LeagueTransferForm
success_url = ''
def get_context_data(self, **kwargs):
print('----NEVER REACHED----')
context = super(LeagueTransferView, self).get_context_data(**kwargs)
petitioner = get_object_or_404(Team, user=self.request.user.profile, league=self.kwargs['pk'])
context['players'] = Player.objects.filter(leagues=self.kwargs['pk']).exclude(teams=petitioner)
return context
def get(self, request, *args, **kwargs):
petitioner = get_object_or_404(Team, user=self.request.user.profile, league=self.kwargs['pk'])
form = self.form_class(initial={'league': self.kwargs['pk'], 'petitioner': petitioner})
form.fields['offered_player'].queryset = petitioner.players
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
transfer = form.save(commit=False)
team = Team.objects.filter(league=transfer.league, players__in=[transfer.requested_player])
if not team: # free agent
transfer.status = 1
messages.success(request, _('transfer succeeded'))
else:
print(team)
transfer.player_owner = team[0]
if transfer.petitioner.user is None: # bot team
transfer.status = 1
messages.success(request, _('transfer succeeded'))
else:
messages.success(request, _('transfer waiting for confirmation by player owner'))
transfer.save()
return HttpResponseRedirect(reverse('hockey_dashboard'))
petitioner = get_object_or_404(Team, user=self.request.user.profile, league=self.kwargs['pk'])
form.fields['offered_player'].queryset = petitioner.players
return render(request, self.template_name, {'form': form})
class LeagueTransferForm(forms.ModelForm):
class Meta:
model = Transfer
fields = ['league', 'requested_player', 'offered_player', 'player_owner', 'petitioner']
labels = {
'requested_player': _('Requested player'),
'offered_player': _('Offered player'),
}
widgets = {
'requested_player': forms.HiddenInput,
'league': forms.HiddenInput,
'player_owner': forms.HiddenInput,
'petitioner': forms.HiddenInput
}
このような意味ですか? def get():.... コンテキスト= self.get_context_data(** kwargs) コンテキスト['form'] =フォーム リターンレンダリング(request、self.template_name、context) – Pietro
これを行う代わりに、 Djangoが提供するさまざまなメソッドを使用して必要なものは、Djangoがあなたのために処理します。フローの理解を深めるため、[FormView]の[ソースコード](https://github.com/django/django/blob/master/django/views/generic/edit.py)をチェックしてください。 –
今私はDjango Viewsの仕組みを本当に理解しています。実際の流れは私には分かりませんでした。ありがとうございました – Pietro