【问题标题】:How to hook the admin forms to get the request context?如何挂钩管理表单以获取请求上下文?
【发布时间】:2011-08-23 18:27:41
【问题描述】:

Django - Overriding get_form to customize admin forms based on request中的问题是通过hook 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() 将不是线程安全的......那么最好的方法是什么?

【问题讨论】:

  • 当我思考这个问题时,我希望有人会指出,用户信息应该使用 ForeignKey 放入模型中。这种重构并不总是适用。

标签: django django-admin


【解决方案1】:

在你的情况下,我觉得写你自己的视图可能比入侵 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'

【讨论】:

  • 谢谢,它确实有效(如果您删除了绑定引用的多余 self 参数)。它可能不是线程安全的,对吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-10
  • 2021-06-20
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多