2016-02-08 3 views
1

Я хочу добавить форму в список отображения моего ModelAdmin, но не могу получить корректный рендеринг csrf_token. Я использую django 1.6. Мой код выглядит следующим образом:Django csrf_token в ModelAdmin

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_token?

+0

Пожалуйста, показать полную ошибку и трассировку. –

ответ

1

Модели методов администратора, используемые в list_display, как approve_or_reject должны возвращать текст. Если вы помечаете вывод как безопасный, вы можете вернуть HTML. Однако возвращаемое значение не обрабатывается как язык шаблона Django, поэтому использование тега токена csrf не будет работать.

Нелегко получить токен csrf внутри метода approve_or_reject, поскольку у вас нет доступа к объекту запроса. Другая проблема заключается в том, что вся таблица списков изменений уже завернута в тег формы (id="changelist-form"), и теги формы не должны быть вложенными.

Альтернативой может быть реализация вашей функции «одобрить или отклонить» как admin action. Пользовательский интерфейс будет отличаться, но он может быть достаточно хорошим.

Смежные вопросы