- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 LeagueTransferView 的 FormView,它基于表单 LeagueTransferForm。
我正在尝试重写 get_context_data 以添加额外的玩家以在模板中呈现。
但是 get_context_data 从未到达。它在其他 View 上运行良好,例如 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
}
最佳答案
您的代码永远不会到达 get_context_data()
,因为您已经重写了 get()
方法,并且没有调用其中的 get_context_data()
函数。您需要在代码中将 context
传递给 render()
时手动调用 get_context_data()
函数。
我建议您尝试以下方法,而不是这样做,而不是覆盖 get()
并返回自定义响应,您只覆盖必要的内容,让 Django 处理其余的部分。
class LeagueTransferView(FormView):
template_name = 'hockey/league/transfer_market.html'
form_class = LeagueTransferForm
success_url = ''
def get_context_data(self, **kwargs):
context = super(LeagueTransferView, self).get_context_data(**kwargs)
context['players'] = Player.objects.filter(leagues=self.kwargs['pk']).exclude(teams=self.petitioner)
return context
def get_initial(self):
initial = super(LeagueTransferView, self).get_initial()
initial['league'] = self.kwargs['pk'] # add custom data to initial
initial['petitioner'] = self.petitioner # add custom data to initial
return initial
def get_form(self, form_class=None):
form = super(LeagueTransferView, self).get_form(form_class)
# override the queryset
form.fields['offered_player'].queryset = self.petitioner.players
return form
def get(self, request, *args, **kwargs):
# only perform 1 query to get 'petitioner'
self.petitioner = get_object_or_404(Team, user=self.request.user.profile, league=self.kwargs['pk'])
return super(LeagueTransferView, self).get(request, *args, **kwargs)
关于python - Django 1.9 FormView永远无法到达get_context_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38774792/
我是 Django 的新手。有一个 html 页面 (project_details) 应该显示项目的标题和任务,但只显示项目的标题,而不是任务。任务存在,问题出在过滤器上!!! View .py 错
类对象属性的get_context_data。 我在 django/contrib/auth/views.py 中遇到 PasswordContextMixin class PasswordConte
# views.py from django.views.generic import ListView from books.models import Publisher class Publis
我收到这个错误 TypeError at /debate/1/ get_context_data() takes exactly 2 arguments (1 given) 现在它被定义为: def
分页工作正常,直到我将 reverse arg 添加到 QS 以便以反向模式排序查询集。之后分页就被破坏了。我可以使用 get() 函数并在那里对其进行分页,但我认为对于这个问题应该是更好的解决方案。
分页工作正常,直到我将 reverse arg 添加到 QS 以便以反向模式排序查询集。之后分页就被破坏了。我可以使用 get() 函数并在那里对其进行分页,但我认为对于这个问题应该是更好的解决方案。
我有以下表单的 Django 代码(django 版本 1.11): class MyDocumentUpdateView(UpdateView): """ We extend UpdateV
我试图通过从多个上下文对象中进行选择来对views.py 中的get_context_data 进行分页。代码示例条件语句中只显示了两个选择,但我还有几个选择,基本上涵盖了表单提交的所有选择。然而,最
这是简化的代码示例,但可能有人在没有代码的确切副本的情况下知道问题发生的原因。所以: class FooView(TemplateView): template_name = 'foo.html'
我最近了解到,当您特别想要执行默认 View 以外的操作时,您应该重写 get 方法: class ExampleView(generic.ListView): template_name =
因为 get_queryset() 只返回一个查询集,我需要查询集 search_store 的长度到模板文件。因此,我尝试通过 get_context_data 将值发送到模板。 我知道我可以通过
我是 Django 的新手。我想使用 mixin 将一些数据返回到多个基于类的 View 。我在 mixin 中定义的 get_context_data 似乎没有在 View 类中调用。 class
在 Django 中使用基于类的 View ,我在 DetailView 中遇到问题。 我想要得到的是特定类型的所有电影的列表,即:Movie.objects.all().filter(genre=g
我们可以在 Django 中做到这一点: class LoginView(generic.FormView): def get_context_data(self, **kwargs):
我是 Django 的新手。我想使用 mixin 将一些数据返回到多个基于类的 View 。我在 mixin 中定义的 get_context_data 似乎没有在 View 类中调用。 class
在 Django 中使用基于类的 View ,我在 DetailView 中遇到问题。 我想要得到的是特定类型的所有电影的列表,即:Movie.objects.all().filter(genre=g
我在 Django 1.9.7 中有一个通用的 DetailView,它使用我的模型 Quiz 来显示 super 省时的无麻烦 View (谢谢 Django) 。但是,我正在努力访问 Quiz 对
我正在从提交的表单中生成一个对象。我想将生成的 AutoField 作为隐藏的表单元素传递给下一个表单。但是,我不知道如何将变量从 post() 传递到 get_context_data()。我知道
我想使用 kwargs 并将 kwargs 元素从 Django CBV 传递到我在 __init__ 中的表单文件。 我有一个带有 get_context_data() 的 View class,它
class SomeView(DetailView) : def __init__(self, *kwargs): print(type(self), dir(self))
我是一名优秀的程序员,十分优秀!