我有一个窗体视图叫做LeagueTransferView,它基于一个窗体LeagueTransferForm。在
我正在尝试覆盖get_context_data以添加额外的播放器以在模板中呈现。在
但是,get_context_数据从未到达。它可以很好地处理其他视图,比如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})
表格
^{pr2}$
您的代码永远不会到达
get_context_data()
,因为您重写了get()
方法,而没有在那里调用get_context_data()
函数。在代码中将context
传递给render()
时,需要手动调用get_context_data()
函数。在与其这样做,我建议您尝试下面的方法,在这种方法中,您不必覆盖
get()
并返回自定义响应,而只覆盖必要的内容,让Django处理其余的内容。在相关问题 更多 >
编程相关推荐