【问题标题】:How to call some method every time user enters some model admin in django?每次用户在 django 中输入一些模型管理员时如何调用一些方法?
【发布时间】:2014-02-05 01:57:30
【问题描述】:

好吧,问题不言自明。

我想过这样的事情,但它不起作用。

class SystemAdmin(ModelAdmin):
    form = SystemAdminForm
    refresh()

    def refresh(self, request, obj):
    avahi = AvahiServiceDetector(self.update)


    def update(self, name, address, port):
        ip = IP.objects.get_or_create(address=address)


name 'refresh' is not defined

【问题讨论】:

  • 您是想只调用一次还是让管理员返回每个项目? (因为您在刷新的定义中使用了 obj)
  • 您要解决的问题是什么?
  • 你应该解释问题到底是什么以及你想要实现什么

标签: python django


【解决方案1】:

创建一个Middleware 类,以便在所有请求到达任何视图之前拦截它们。 https://docs.djangoproject.com/en/dev/topics/http/middleware/

干杯

【讨论】:

    【解决方案2】:

    你可以试试get_form:

    class SystemAdmin(ModelAdmin):
        form = SystemAdminForm
    
        def get_form(self, request, obj=None, **kwargs):
            self.refresh()
            return super(SystemAdmin, self).get_form(request, obj, **kwargs)
    
        def refresh(self, request, obj):
            avahi = AvahiServiceDetector(self.update)
    
        def update(self, name, address, port):
            ip = IP.objects.get_or_create(address=address)
    

    【讨论】:

    • 成功了,谢谢。我是 python 和 django 的新手,所以对我来说并不明显。
    【解决方案3】:

    您正在从全局命名空间调用刷新,这当然没有定义。您需要做的是在__init__ 中调用您的方法:

    class SystemAdmin(ModelAdmin):
        form = SystemAdminForm
    
        def __init__(self, *args, **kwargs):
            super(SystemAdmin,self).__init__(*args, **kwargs)
            self.refresh()
    
        def refresh(self, request, obj):
            avahi = AvahiServiceDetector(self.update)
    
    
        def update(self, name, address, port):
            ip = IP.objects.get_or_create(address=address)
    

    【讨论】:

    • 这实际上效果更好,因为当用户进入此页面时,get_form 不仅调用一次,而且不止一次。在 init 中调用 refresh 是显而易见的解决方案,但是当我自己尝试时,我不知道 ModelAdmin init 使用什么参数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2015-05-12
    相关资源
    最近更新 更多