我正在尝试在Django中编写一个简单的CRM应用程序;部分是作为学习练习,部分是为了内部使用。
我的架构稍微复杂一点,因为它只有一个Contact模型(带有家庭电话,工作电话,家庭电子邮件等),我已经删除了Cntact模型以及Phone模型,电子邮件模型等。 ,一个ForeignKey指向一个联系人。关键是让联系人拥有任意数量的电话号码,电子邮件地址等。简单,对吧?
我有一些用于显示数据的工作视图和模板 - 没有问题。在admin.py上只有极少量的戳戳我有一个... 8个不同的TabularInlines设置,管理界面用于创建和编辑数据......但它的丑陋和笨拙到不可用的地步,当然没有权限或任何东西的概念。我也不是真的喜欢拥有一个完全不同的界面来显示和搜索数据,而不是编辑和添加联系人...我希望尽可能多地内联,这样我就可以搜索到名称,查看记录,单击“添加注释”,弹出表单,填写详细信息,单击提交,然后完成,所有这些都具有AJAXy优点,因此没有页面重新加载。
问题:我是否应该修改管理界面以尝试使其可用于面向用户的应用程序?如果是这样,任何人都可以向我指出一个好的指南或示例,其中有人真正改变了管理界面,使其适用于面向用户的CRUD操作吗?
或者我应该继续编写自己的CRUD视图?如果是这样,任何人都可以指向一个好的指南或示例,其中有人编写了自定义CRUD视图,可以使用大量的ForeignKeys和内联吗?理想情况下,我想要一个显示单个联系人的表单,他的所有电子邮件记录,以及添加新电子邮件记录的空白表单,以及添加更多空白表单的按钮,以及他的电话记录,以及空白表单等等。所有8个相关模型。
(或者我认为这一切都错了?任何建议都值得赞赏。)
答案 0 :(得分:4)
对于我们的Intranet,我们使用ModelAdmin子类(未通过admin.site.register安装在管理站点上)用于大多数C(R)UD视图。通过为视图使用自定义模板,它看起来根本不像Django admin。但非常方便的是,它已经为我们处理了所有验证/保存。
一般来说,我发现admin-“hacking”对于快速编写C(R)UD视图非常有用,并且通常对ModelAdmin子类进行相对较小的更改,您可以使其适用于您的用例。
所以我投票使用ModelAdmin,但不是你在admin中使用的那个,挂钩一个不同的模板,然后想出一些花哨的CSS。
答案 1 :(得分:1)
我在admin上成功创建了一个软件。 管理钩子(现在)允许进行非常细粒度的自定义,即通常您只需要触摸想要更改的内容。
这些变化可以从简单的美容调整到完全换出:
如果您提供templates / admin / base.html,您的管理网站可以按您喜欢的方式查看。当然,顶部的导航栏可能包含指向您自己视图的链接。注意不要在链接中硬编码URL,也要反向。
您可以重载ModelAdmin的“change_view”,“changelist_view”等,并将它们换成您自己的视图。例如,我使用搜索界面替换了默认更改列表及其简单过滤,该界面允许构建动态查询,结果列由用户自定义,以及加载/保存这些搜索。这并没有影响该ModelAdmin的任何其他观点。
重载ModelAdmin的“get_urls()”让你重新编写现有的管理网址以转到你自己的视图。我为一个模型做了后者,我希望简单的添加屏幕被一个完全自定义的向导(仅靠模型框架)取代。
不要忘记最简单的方法,尤其是关于你的“AJAXy善”:在你的ModelAdmin的Meta中定义“css”和“js”。想要从底部移动内联到第三和第四个字段之间,这是不可能通过参数? jquery中的单行。
查看“django-grappelli”,了解如何改善管理员外观。
你是什么意思“当然没有权限概念或任何东西”?