如何禁止管理员在Django管理员中更改实例?

时间:2017-01-23 17:38:16

标签: python django django-admin

我有一个模型Order和模型InvoiceOrder

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

在创建订单对象后立即创建发票对象。管理员必须在客户付款之前编辑发票(价格字段)。

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

enter image description here

有可能吗?当我在invoice中将readonly_fields添加到OrderAdmin时,管理员无法修改诸如invoice.price等属性。

编辑:

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

2 个答案:

答案 0 :(得分:1)

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

以下是有关如何覆盖模板的文档部分:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

虽然这不是最佳解决方案,但您可以使用Javascript隐藏/禁用您不想要的部分。

最后,您可能需要考虑使用Django管理员:

  

管理员的推荐用途仅限于组织的内部使用   管理工具。它不是用于构建整个前端   周围。

     

管理员有许多用于自定义的钩子,但要注意尝试   独家使用这些钩子。如果你需要提供更多   以流程为中心的接口,抽象出实现   数据库表和字段的详细信息,那么可能是时候了   写下自己的观点。

答案 1 :(得分:-1)