对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?

Posted

技术标签:

【中文标题】对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?【英文标题】:For a django model, how can I get the django admin URL to add another, or list objects, etc.? 【发布时间】:2011-07-09 00:15:36 【问题描述】:

尽管我很喜欢 django 文档,但 the section on bookmarklets in the admin 却出奇地模糊。

我的问题是:如果我在视图中并且我有一个 django 模型(或者,在某些情况下,是一个实际对象),我如何才能访问该模型(或对象)的相关管理页面?如果我有对象椰子运输.swallow.objects.all()[34],我怎样才能直接跳转到管理页面来编辑那个特定的燕子?

同样,如何获取管理页面的 URL 以添加另一个燕子?

【问题讨论】:

【参考方案1】:

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls

obj = coconut_transportation.swallow.objects.all()[34]

# list url
url = reverse("admin:coconut_transportation_swallow_changelist")

# change url
url = reverse("admin:coconut_transportation_swallow_change", args=[obj.id])

# add url
url = reverse("admin:coconut_transportation_swallow_add")

【讨论】:

特定模型实例的更改列表不是“对象列表”【参考方案2】:

您可以从实际的对象实例中检索它,这对我有用:

from django.core import urlresolvers
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(object.__class__)
object_admin_url = django.core.urlresolvers.reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(object.pk,))

看到这个:http://djangosnippets.org/snippets/1916/

【讨论】:

我喜欢这个,因为它适用于任何对象 - 很好:-)【参考方案3】:

您实际上可以在不查询 ContentTypes 的情况下检索信息

只需将其添加到您的模型类中:

def get_admin_url(self):
    return urlresolvers.reverse("admin:%s_%s_change" %
        (self._meta.app_label, self._meta.model_name), args=(self.pk,))

【讨论】:

这是 self._meta.model_name(不是 module_name)。除此之外,很好的解决方案,谢谢! module_name VS model_name 实际上取决于 Django 版本。见:code.djangoproject.com/ticket/19689

以上是关于对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?的主要内容,如果未能解决你的问题,请参考以下文章

对于在Django中使用modeltranslation翻译的字段,如何在upload_to方法中获取FileField的字段名?

如何在 django 中同时获取两个模型

如何获取 Django 模型中字段的默认值?

如何从 django 的模型中获取一个字段

如何获取 Django 模型来自的应用程序?

如何在 django 模板中通过模型名获取模型