2016-02-08 53 views
1

我想將表單添加到我的ModelAdmin的列表顯示中,但無法使csrf_token正確呈現。我使用的是django 1.6。我的代碼如下所示:ModelAdmin中的Django csrf_token

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標記標記將不起作用。

approve_or_reject方法中獲取csrf標記並不容易,因爲您無權訪問請求對象。另一個問題是整個變更列表已包裝在表單標籤(id="changelist-form")中,並且表單標籤不應嵌套。

另一種方法是將您的「批准或拒絕」功能實現爲admin action。用戶界面會有所不同,但它可能夠好。