ModelAdmin中的Django csrf_令牌

2024-05-23 20:46:38 发布

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

我想向ModelAdmin的列表显示添加表单,但无法获得csrf_U令牌以正确呈现。我用的是django 1.6。我的代码如下所示:

class ApplicationAdmin(admin.ModelAdmin):
    model = Application
    list_display = ('applicant', 'approve_or_reject')

    def approve_or_reject(self, obj):
        return '<form method="post" action="/applications/approvals">{% csrf_token %}<input type="submit" class="btn-approve" name="approve" value="Approve"/></form>'

    approve_or_reject.short_description = 'Approve/Reject'
    approve_or_reject.allow_tags = True

admin.site.register(Application, ApplicationAdmin)

我一直在得到错误:

KeyError at /management/application/ '% csrf_token %'

如何正确传递csrf_2;令牌?


Tags: ordjangoformtoken表单列表adminapplication
1条回答
网友
1楼 · 发布于 2024-05-23 20:46:38

list_display中使用的模型管理方法如approve_or_reject应该返回文本。如果将输出标记为安全,则可以返回HTML。但是,返回值并不像Django模板语言那样被处理,因此使用csrf令牌标记将不起作用。在

approve_or_reject方法中获取csrf令牌并不容易,因为您没有访问request对象的权限。另一个问题是整个changelist表已经包装在一个表单标记(id="changelist-form")中,并且不应该嵌套表单标记。在

另一种方法是将“批准或拒绝”功能作为admin action实现。用户界面会有所不同,但可能已经足够好了。在

相关问题 更多 >