覆盖特定模型的 Django 管理 URL?

2024-04-17

首先是一些背景:

我有一个Event模型具有各种event_types。我想将这些事件类型之一“电影”分解到它自己的管理中。我已经具备了基本功能:继承自的代理模型Event, named Film,该代理模型的自定义管理器,仅将其过滤为“电影”事件类型,并且它有自己的 ModelAdmin。

问题出在相反的情况下。我现在需要从主要过滤掉电影Event行政。我不想改变Event模型或其默认管理器,因为影响太广泛了。所以,我尝试创建另一个代理模型,EventAdminProxy,其唯一目的是在管理员中提供经过过滤的事件列表。然后我注册这个模型,而不是Event,与现有的 ModelAdmin。

这显然是有效的,但它有一个不幸的副作用,即更改管理中的 URL。更改列表不再位于“/admin/event/event/”,而是现在位于“/admin/event/eventadminproxy/”。

我想做的是保留此设置,但也保留旧的 URL。我尝试过重载 ModelAdminget_urls方法,但据我所知,您无法控制那里的完整 URL,只能控制“/app_label/model_class/”部分之后的内容。

我考虑过在主 urls.py 中覆盖它,但无法找出可以接受的视图。实际视图仅在实例化的 ModelAdmin 对象上可用,而在类本身上不可用。

关于如何覆盖管理员中使用的 URL 有什么想法吗?


查看 Django 源代码,管理 URL 构建在两个位置,即ModelAdmin实例,并且在AdminSite实例。

您想要更改的部分是在 AdminSite 实例中构建的(django.contrib.admin.sites.AdminSite),您可以将其子类化并覆盖get_urls方法。如果您查看该方法的后半部分,您会看到以下内容:

    # Add in each model's views.
    for model, model_admin in self._registry.iteritems():
        urlpatterns += patterns('',
            url(r'^%s/%s/' % (model._meta.app_label, model._meta.module_name),
                include(model_admin.urls))
        )

在那里添加模型的 ._meta.module_name 这只是模型的小写名称(django.db.models.options.Options.contribute_to_class).

一个简单的方法是覆盖站点的get_urls方法并为代理模型添加一个字典或特殊情况,以便它使用不同的 url 而不是model._meta.module_name,大致如下:

类 MyAdminSite(AdminSite):

module_name_dict = {
    EventAdminProxy: 'myfunkymodulename'
}

def get_urls(self):
    base_patterns = super(MyAdminSite, self).get_urls()
    my_patterns = patterns('',)

    for model, model_admin in self._registry.iteritems():
        if model in self.module_name_dict:
            module_name = self.module_name_dict[model]
            my_patterns += patterns('',
                url(r'^%s/%s/' % (model._meta.app_label, module_name),
                    include(model_admin.urls))
            )

    return my_patterns + base_patterns
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖特定模型的 Django 管理 URL? 的相关文章

随机推荐

  • 通过 INotifyPropertyChanged 更新 ListView 的 ItemsSource

    回答的同时其他问题 https stackoverflow com q 33553691 2681948我已经进入了一件我试图理解的事情 我有一个ListView which 项目来源绑定到我的页面的属性 页面实现了INotifyPrope
  • 对于依赖于时间的大型数据集,命名表 september_2010 是否可接受且有效?

    我每天需要存储大约 73 200 条记录 由 3 个数据点组成 id 日期和整数 我团队的一些成员建议使用月份作为表名称 september 2010 创建表 而其他人则建议使用一个包含大量数据的表 关于如何处理如此大量的数据有什么建议吗
  • 如何更新 Prim 算法堆中的元素优先级?

    我正在研究Prim算法 代码中有一部分穿过切割的下一个顶点将进入属于MST 在这样做的同时 我们还必须 更新另一组中与离开顶点相邻的所有顶点 这是来自的快照CLRS 有趣的部分在于第 1 行 11 但由于我们在这里使用堆 因此我们只能访问最
  • C++14 是否定义了 unsigned int 填充位上按位运算符的行为?

    C 标准 If a C 14 http www open std org jtc1 sc22 wg21 docs papers 2013 n3797 pdf实现包括在底层字节中填充位unsigned int 标准是否指定是否不得对填充位执行
  • 在没有 Rails 的情况下调用 ERB:未定义的方法“raw”

    我正在使用ERB引擎 http www ruby doc org stdlib 1 9 2 libdoc erb rdoc ERB html生成我的 Rails 网站页面的离线 HTML 版本 当 Rails 显示时 该页面显示得很好 但我
  • 将 Rails 与 Paperclip 和 SWFUpload 结合使用

    我对用户模型进行了基本的 Rails 应用程序测试 该模型具有用回形针处理的照片字段 我创建了能够创建 编辑用户的视图 并且照片上传运行良好 h1 Editing user h1 p br p p br p
  • if..else 或 Select..case 哪个更快?

    我有三个条件可以比较 以下两者哪一个更快 请指出我 谢谢大家 If var 1 then Command for updating database ElseIf var 2 then Command for updating databa
  • 如何查找列表中句子列表中每个单词的引理和频率计数?

    我想使用 WordNet Lemmatizer 找出引理 并且还需要计算每个词频 我收到以下错误 轨迹如下 类型错误 不可散列的类型 列表 注 语料 库可在nltk包装本身 到目前为止我已经尝试过如下 import nltk re impo
  • 如何在 Komodo IDE 中设置断点?

    我已经安装了科莫多集成开发环境 https www activestate com products komodo ide 我想知道在哪里 如何设置断点 以便顶行的第 9 个符号 gt 明白了吗 EDIT 单击代码左侧装订线中的行号
  • Scala 中的函数式反应式编程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • Ant:将compilerarg传递给javac

    我有可以编译的 ant 脚本
  • 如何让 gdb 保存命令历史记录?

    我该如何设置gdb这样它就可以保存命令历史记录 当开始新的gdb会话 我想使用向上箭头键来访问之前会话的命令 简短回答 mkdir p config gdb echo set history save on gt gt config gdb
  • 如何使用 UIPath 中的“关闭选项卡”活动关闭子选项卡

    UiPath 是closing the 主窗口而不是子窗口 我在中定义了一个浏览器变量attach browser活动并将该浏览器变量传递给Close tab活动 Chrome 主窗口仍处于关闭状态 另附上项目 xaml 文件https d
  • iOS11 AppIcon无法更改

    Xcode 9 测试版 6 iOS 11 测试版 10 我想要使 用自定义应用程序图标打包应用程序 因此我尝试替换 DerivedData Users XXX Library Developer Xcode DerivedData proj
  • Pyparsing 分隔列表仅返回第一个元素

    这是我的代码 l 1 3E 2 2 5E 1 parser Word alphanums grammar delimitedList parser delim t print grammar parseString l 它返回 1 3E 2
  • iOS:从 url 加载图像

    我需要从 url 加载图像并将其设置在 UIImageView 中 问题是我不知道图像的确切大小 那么如何才能正确显示图像呢 只需使用 UIImage 的 size 属性即可 例如 NSURL url NSURL URLWithString
  • 将带有ajax请求的数组发送到php

    我像这样创建了数组 9 ques 5 19 ques 4 现在我想将它从 JS 发送到 PHP 但我没有得到正确的结果 我的JS代码是 button click function e e preventDefault ajax type p
  • nameof 和 typeof 的区别

    如果我错了请纠正我 但是做类似的事情 var typeOfName typeof Foo Name and var nameOfName nameof Foo 应该给你完全相同的输出 根据该消息来源 可以理解的原因之一是 https msd
  • 使用 RPATH 但不使用 RUNPATH?

    这一页 https web archive org web 20120418232524 http labs qt nokia com 2011 10 28 rpath and runpath 说关于图书馆检索的顺序ld so Unless
  • 覆盖特定模型的 Django 管理 URL?

    首先是一些背景 我有一个Event模型具有各种event types 我想将这些事件类型之一 电影 分解到它自己的管理中 我已经具备了基本功能 继承自的代理模型Event named Film 该代理模型的自定义管理器 仅将其过滤为 电影