如何挂钩管理表单以获取请求上下文?

时间:2011-05-12 01:42:34

标签: django django-admin

Django - Overriding get_form to customize admin forms based on request中,问题是通过挂钩get_form()方法,根据请求对象中用户的权限选择不同的表单。

我想在迭代期间实际调用对象上的方法,该方法使用请求上下文来输出一些信息。

documentation列出了四种挂钩表单显示的方法。

但是功能签名不包括请求对象。如果他们这样做了,你可以写一些类似的东西(注意request实际上不是一个论点):

class CustomAdmin(admin.ModelAdmin):
    list_display       = [ 'name', 'user_specific', ]
    #
    def user_specific(self, obj, request):
        return obj.func1(request)
    #
    output.short_description = 'UserSpecific'

如果用于存储状态,覆盖get_form()将不是线程安全的......那么最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

在你的情况下,我觉得写自己的观点比黑客django的管理网站更好。

但如果你坚持,你可以覆盖changelist_view并记录请求。

class CustomAdmin(admin.ModelAdmin):
    list_display       = [ 'name', 'user_specific', ]

    def changelist_view(self, request, extra_context=None):
        self.request = request
        return super(admin.ModelAdmin, self).changelist_view(self, request, extra_context)

    def user_specific(self, obj):
        return obj.func1(self.request)

    output.short_description = 'UserSpecific'