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

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

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

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

【问题讨论】:

    标签: django django-admin django-urls


    【解决方案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
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2015-02-15
    • 2011-07-01
    • 2014-03-26
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多