gpt4 book ai didi

Django - UpdateView 中的动态 success_url

转载 作者:行者123 更新时间:2023-12-04 02:07:26 25 4
gpt4 key购买 nike

我希望我的用户能够查看页面、更新该页面,然后返回到该页面或继续进行更多编辑。

这是显示信息的 View :

    # 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

当用户在后一个​​ View 中完成更新时,他们应该在完全相同的团队中返回到前者。 This post在使用“get_success_url”的范围内帮助我朝着正确的方向前进,但我仍然被困住了,因为我认为我没有使用 kwargs。我尝试过的一切都导致了错误。

(我的(吞咽)想法是我应该重写 url 以使用 PK,这样这些东西就更容易了,但我想确定一下)

编辑:我的错误尝试(注意:我有两个提交按钮,一个用于更新,一个用于更新和添加注释)。

     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})

解决方案:

学习了如何使用 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

最佳答案

模型对象的 get_absolute_url 怎么样?

https://docs.djangoproject.com/en/1.10/ref/models/instances/#get-absolute-url

from django.urls import reverse

class GameModel(models.Model):
....

def get_absolute_url(self):
return reverse('game:single_page', args=[str(self.id)])

在你的 GameView 中:

class GameView(generic.TemplateView):
template_name = "matchview.html"

def get_context_data(self, **kwargs):
....

def get_success_url(self, **kwargs):
return self.object.get_absolute_url()

关于Django - UpdateView 中的动态 success_url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42065922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com