Django管理表单操作不发送POST参数

2024-05-14 15:52:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型管理员:

class Items(admin.ModelAdmin)

    actions = ['action_create_task']

    def action_create_task(self, request, queryset):
        if request.POST.get('post'):
            form = CreateTaskAction(request.POST)

            if form.is_valid():
                # doing something
                self.message_user(request, "Success appended task!")
                return redirect(request.get_full_path())
        else:
            form = CreateTaskAction()

        return render(request, 'create_task.html', {
            'title': 'Create task for selected items',
            'itmes': queryset,
            'form': form
        })

我在我的模板create_task.html上使用这个HTML代码

^{pr2}$

但是如果我选择了一些项目,接下来选择操作,然后提交Create Task Action表单,我就没有收到任何帖子,只会重定向到对象列表,没有什么消息等等。换句话说,当我提交表单时,我重定向到了站点列表,而没有调用我的action函数。我做错什么了?在


Tags: selfform表单taskgetreturnifrequest
1条回答
网友
1楼 · 发布于 2024-05-14 15:52:03

您正在编写一个更复杂的管理操作,它需要中间页。您正在混合您的动作功能和动作视图(中间视图)。当您启动一个操作时,django提供的一个视图处理它并调用提供所选模型实例的操作函数(queryset),然后调用视图将用户重定向回原始更改列表页面。因此,您可以有效地将表单发布到django视图,该视图本应处理操作请求,这就是为什么您一直获得刷新重定向。在

您要做的是创建一个“创建任务”视图:

class Items(admin.ModelAdmin)

    actions = ['action_create_task']

    def action_create_task(self, request, queryset):
        # do some validation on queryset and request
        if all good:
            return HttpResponseRedirect(/path_to_create_task_view)
        else:
            self.message_user('action rejected')

    def create_task_view(self, request):
        if request.method == 'POST':
            form = CreateTaskAction(request.POST)
            if form.is_valid():
                # doing something
                self.message_user(request, "Success appended task!")
                return HttpResponseRedirect(/somewhere)
        else:
            form = CreateTaskAction()

        return render(request, 'create_task.html', {
            'title': 'Create task for selected items',
            'itmes': queryset,
            'form': form
        })

注意您可能希望避免硬编码的URL,请参见reverse resolution of URLS。另请参见actions that provides intermediate pages。在

相关问题 更多 >

    热门问题