查找管理员更改任意Django模型的URL

Cer*_*rin 4 python django django-admin

如何查找任意模型的管理员更改网址?

如果我知道模型,我可以通过以下方式获取网址:

>>> print urlresolvers.reverse('admin:myapp_mymodel_change', args=(obj.id,))
/admin/myapp/mymodel/123/
Run Code Online (Sandbox Code Playgroud)

我在模型上有一个通用外键,我想在admin中为对象的相应更改页面提供一个链接.由于它可以是任何类型的模型,我不能轻易使用reverse().有什么方法我可以简单地这样做以下?

>>> get_admin_change_url(obj)
/admin/myapp/mymodel/123/
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 5

获得对象后,可以在其_meta类上访问其应用程序标签和名称,然后动态构造管理员更改URL的名称.

app_label = obj._meta.app_label
model = obj._meta.module_name

reverse('admin:%s_%s_change' % (app_label, model), args=(obj.id,))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这假设您的 admin.py 与您的 models.py 匹配,这通常是这样。如果您使用代理模型,或者在不同的 app_label 下显示模型的 modeladmin,则这将不起作用。 (2认同)