我希望我的用户能够看到页面,更新该页面,然后返回到该页面或继续进行更多编辑。Django - UpdateView中的动态success_url
这里的视图来显示信息:所以现在他们想加入一个游戏信息
# urls.py
url(r'^gameview/$', views.GameView.as_view(template_name='matchview.html'), name='GameView')
# Views.py
class GameView(generic.TemplateView):
template_name = "matchview.html"
def get_context_data(self, **kwargs):
context = super(GameView, self).get_context_data(**kwargs)
q = self.request.GET.get('match')
context['report'] = GameNotes.objects.filter(game=q)
context['game'] = Schedule.objects.get(match=q)
context['gamepic'] = Photo.objects.filter(game=q)
return context
。我使用的UpdateView
class GameView(generic.TemplateView):
template_name = "matchview.html"
def get_context_data(self, **kwargs):
context = super(GameView, self).get_context_data(**kwargs)
q = self.request.GET.get('match')
context['report'] = GameNotes.objects.filter(game=q)
context['game'] = Schedule.objects.get(match=q)
context['gamepic'] = Photo.objects.filter(game=q)
return context
当用户完成在后一种观点的更新,他们应该返回到前上完全相同的团队。 This post帮助我向正确的方向前进,就像使用'get_success_url'一样,但是我仍然坚持因为我不认为我在使用kwargs。我试过的所有东西都会导致错误。
(我(一饮而尽)的想法是,我要重新写使用的PK让这东西是比较容易的网址,但我想确认)
编辑: 我的fugly尝试(注:我有两个提交按钮,一个用于更新,另一个用于更新和添加注释)。
def form_valid(self, form):
if form.is_valid():
form.save()
if 'submit' in self.request.POST:
q = self.request.GET.get('match')
return reverse_lazy('TeamView', args=(q))
else:
return render('addnotes', {'game' : q})
SOLUTION:
学会了如何使用URL参数kwargs: (任何人新我一样,self.kwargs.get辉煌)
def get_success_url(self, **kwargs):
q = self.kwargs.get('match')
if "submit" in self.request.POST:
url = reverse('GameView', args={q : 'match'})
else:
url = reverse('AddNotes', args={q : 'match'})
return url
你并不需要使用的PK,但你真的应该使用URL参数而不是查询字符串。 –
请用'get_success_url'显示你已经尝试了什么。在URL('/ gameview/1 /)'中拥有主键比查询字符串('/ gameview /?match = 1')更干净,但如果不想要,则不必切换。您可以在'get_success_url'中访问'self.request.GET.get('match')'。 – Alasdair
@DanielRoseman我可以问为什么?更安全? –