2012-01-27 166 views
2

我一直在使用django为菜单系统编写一个相当复杂的面向对象模型。以编程方式创建django模型

最近我考虑过允许管理员创建'build_menu'对象的想法。

理想的情况是将输入提供一个名称,一旦创建了菜单将有:

  • 通话的Django的startApp菜单
  • views.py,models.py和admin.py从副本菜单的应用程序,与类名替代类名
  • 追加到urls.py中,以包括“菜单”
  • 追加“.prefix_menu”到新的领域INSTALLED_APPS settings.py中
  • 蟒蛇manage.py执行syncdb
  • pkill的蟒蛇(Dreamhost上所以我需要重新启动的过程中在屏幕上看到新的变化)

显然没有通用的实施,会为我做这件事,但更大的问题是:这可能吗?是否可以将这些命令写入脚本以便从服务器端执行,并且在django管理站点上创建新的“build_menu”对象后,让它运行该脚本,然后在完成时刷新页面?或者这是我无法从管理网站做的事情?

+0

你或许可以编写这样一个脚本,从挂在管理站点的自定义视图运行。但是,它真的是你想要做的吗?我非常*强烈考虑重新构建层次结构,以便可以从数据库完成这种事情,而不是从服务器端修改代码。 (如果出现问题 - 并且使用文件系统和网络服务器以及代码生成等等,任何事情都可能出错 - 您可能会损坏整个网站,直到有人进来并手动修复事情。) – Dougal 2012-01-27 19:53:24

+0

我同意,我知道这是不是最好的方式去做,但我试图找出如何改变实现,使其以django fied的方式工作。 – 2012-01-27 21:29:20

回答

1

一个快速,哈克方法,让他们展现出来单独的管理将是:

  • 请与charfield属性type_name AA单模型,斯内德建议
  • 添加type_namelist_filter属性模型管理的
  • Override the relevant template列出的type_name的独特价值与链接到相应的页面过滤

这有一些相当明显的问题(例如,在保存一个对象之后,它会将你带回未经过滤的编辑页面),但是你可以重写管理列表视图,也可以使用其他一些管理功能来完成你想要的功能 - 无需修改代码。

+0

这就是我一直在寻找的东西,我不知道如何实现Ned的答案,以获得我需要的管理界面。它允许我保留所有的功能,而不用重复代码,这是一种不好的做法。谢谢! – 2012-01-29 18:58:52

3

也许我不明白你想要完成什么,但对我来说似乎没有多大意义。为什么复制views.py等,如果他们没有修改?你会得到N份相同代码的副本,没有意义。这听起来像你想要一个模型与一个额外的name列,而不是N个模型。

+0

我认为这可能有效,但我需要所有同名的表格在管理界面中可视化地分离,这可能吗? – 2012-01-27 21:29:50

+0

为什么你需要你的用户使用管理界面? – 2012-01-27 21:32:17

+0

我需要从管理端创建全新的菜单,基本上我需要相同的数据库结构,但没有数据,因此可以创建一个新的菜单。 – 2012-01-27 21:47:54