【问题标题】:how to access modeladmin class instance from an inline class instance in django admin如何从 django admin 中的内联类实例访问 modeladmin 类实例
【发布时间】:2015-10-22 18:04:27
【问题描述】:

我正在从 admin.py 中的 url 收集 modeladmin 类的当前实例,如下所示。但是现在如果我尝试创建一个新表单,它会抛出错误,因为 url 不包含任何 id。我如何以 django 的方式解决它?如何在内联类实例中获取 modeladmin 类的当前实例?

下面是我在抛出错误的内联类中的代码。

def get_object(self, request, model):
    object_id = resolve(request.path).args[0]   #throws index error when 'add new form is clicked'
    try:
        object_id = int(object_id)
    except ValueError:
        return None
    return model.objects.get(pk=object_id)

【问题讨论】:

  • 我通过为 IndexError 添加 try 和 except 块来解决此问题。我仍然不知道如何从内联类实例访问 modeladmin 实例。

标签: django django-models django-admin


【解决方案1】:

当你在admin_site注册AdminClass时,Django会实例化admin类保存在注册表中(一个dict),其中key为ModelClass,value为ModelAdminClass实例,

从 Inline Instance 你可以访问到 parent_model,然后在注册表中搜索

def get_object(self, request, model):
    ...
    admin_site._registry[self.parent_model]

【讨论】:

  • 好方法,或者admin.site._registry在我的情况下!
猜你喜欢
  • 2010-10-31
  • 2017-08-22
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多