如何在自定义的Django模型管理员中使用CSRF令牌?

时间:2019-06-14 15:05:27

标签: django django-admin django-csrf django-modeladmin django-admin-actions

我正在一个简单的Django项目中工作,我想为admin中的每个模型对象添加一个按钮,并且可以使用以下命令创建它:
             在admin.py

constexpr auto MaxEventSize()  

但是当我执行它时,会给出关键错误:

template<typename T>constexpr T MaxEventSize()  

那么如何解决此错误? 要么 还有其他方法可以向我的验证按钮添加功能吗?

2 个答案:

答案 0 :(得分:0)

如果您要谈论为每个模型创建一个新动作,则可以执行以下操作:

from django.conf.urls import url
from django.contrib import admin
from django.http import HttpResponseRedirect
from django.utils.html import format_html

class RegistrationAdmin(admin.ModelAdmin):
    list_display = ['username', 'button']

    def button(self, obj):
        return format_html('<a href="new-action/{}">{}</a>', obj.id, obj.username)

    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
        ]
        return my_urls + urls

    def new_action(self, request, id):
        if request.user.is_authenticated:
            # your stuff
            self.message_user(request, 'ID {} successfully processed'.format(id))
        return HttpResponseRedirect('/admin')

答案 1 :(得分:0)

@Danilo Akamine提供的

解决方案对我来说完全正常。 但是那些有相同问题的人可能会要求: 网址方法:

        my_urls = [
            url(r'^new-action/(?P<id>[0-9]+)$', self.new_action)
        ]

属于 django.conf.urls 因此将此行添加到admin.py:

from django.conf.urls import url

或者您也可以将django.urls中的路径方法用作:

  my_urls = [
            path('new-action/<int:id>', self.new_action)
        ]

有关更多信息: 访问https://docs.djangoproject.com/en/2.2/topics/http/urls/