2017-01-23 87 views
1

我有一个模型Order和模型Invoice。该Order具有创建订单对象之后的分配给它如何禁止管理员更改Django admin中的实例?

invoice = models.OneToOneField('Invoice', related_name='order', on_delete=models.CASCADE, blank=True, null=True) 

发票对象被创建。管理员必须在客户付款前编辑发票(价格栏)。

问题是,Django-admin允许管理员也更改此字段(图像的底部),我不能冒险,但我想让铅笔图标(更改发票的属性)。

enter image description here

是否有可能做到这一点?当我在OrderAdmin添加invoicereadonly_fields,管理员无法编辑像invoice.price等

编辑这些属性:

所以我想管理员能够编辑发票的属性。不添加或从下拉列表中选择。

回答

1

一种选择是提供这种观点自定义模板。 docs表示您可以使用ModelAdmin.change_form_template指定自定义模板的路径。

这里是谈论如何重写模板的文档的一部分:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

虽然这不是最佳的解决方案,你也许可以使用JavaScript来隐藏/关闭你不想要的部分。

最后,你可能要考虑你的Django管理的用法:

管理规定的使用仅限于组织内部 管理工具。它并不打算用于构建您的整个前端 。

管理员有很多自定义钩子,但要小心尝试 专门使用这些钩子。如果您需要提供更多的以流程为中心的界面,并将数据库表和字段的详细信息抽象出来,那么可能需要编写您自己的视图。