我在Django中使用'success_url'时遇到问题

时间:2019-04-26 00:00:08

标签: django python-3.x

视图中,我有以下课程:

class AddPersonView(CustomCreateView):
    template_name = "register/add.html"
    form_class = PersonForm
    model = Person
    obj = Person.objects.all().count()
    if obj > 0:
        obj = Person.objects.last()
        success_url = reverse_lazy('register:edit_person_view', kwargs={'pk': obj.id})

    def get_context_data(self, **kwargs):
        context = super(AddPersonView,
                        self).get_context_data(**kwargs)


class EditPersonView(CustomUpdateView):
    template_name = "register/edit.html"
    form_class = PersonForm
    model = Person
    obj = Person.objects.all().count()
    if obj > 0:
        obj = Person.objects.last()
        success_url = reverse_lazy('register:edit_person_view', kwargs={'pk': obj.id})

    def get_context_data(self, **kwargs):
        context = super(EditPersonView,
                        self).get_context_data(**kwargs)
        return context

我的意图是,当您在此人的注册页面上提交submit时,新页面就是该人的编辑页面。但是,在添加或编辑一个人之后,我的使用方式是,使用上一个记录的id打开下一页。 例如,如果我现在注册一个ID为person的{​​{1}}并给12我应该打开的页面应该是submit,但它正在打开mysite.com/register/edit/12

我尝试执行以下操作:在两个类中都使用了此函数,而不是使用变量mysite.com/register/edit/11

sucess_url

但是,通过在页面上输入def get_success_url(self): return reverse('register:edit_person_view', kwargs={'pk': self.kwargs('pk')}) 会出现此错误:

submit

下一页成为我要添加/编辑的对象的编辑页面的正确方法是什么?

编辑

进行一些TypeError at /register/edit/12/ argument of type 'NoneType' is not iterable During handling of the above exception (Reverse for 'None' not found. 'None' is not a valid view function or pattern name.) 函数不起作用的感知测试,因为当它使用相同的形式且带有get_success_url变量时,在编辑人员并进行提交时,我将重定向到新页面进行新的注册。

success_url

但是使用该功能时:

class EditPersonView(CustomUpdateView):
    template_name = "register/edit.html"
    form_class = PersonForm
    model = Person
    success_url = reverse_lazy('register:add_person_view')

    def get_context_data(self, **kwargs):
        context = super(EditPersonView,
                        self).get_context_data(**kwargs)
        return context

我遇到同样的错误

def get_success_url(self):
    return reverse('register:add_person_view')

出什么问题了,以至于TypeError at /register/edit/12/ argument of type 'NoneType' is not iterable During handling of the above exception (Reverse for 'None' not found. 'None' is not a valid view function or pattern name.) 函数不起作用?

1 个答案:

答案 0 :(得分:0)

您的一个错误是因为实例化创建视图时调用了Person.objects.last(),这是在创建新Person之前

对于get_success_url,请尝试以下操作:

def get_success_url(self):
    return reverse('register:edit_person_view', kwargs={'pk': self.object.pk})