2017-01-23 93 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管理的用法:

管理規定的使用僅限於組織內部 管理工具。它並不打算用於構建您的整個前端 。

管理員有很多自定義鉤子,但要小心嘗試 專門使用這些鉤子。如果您需要提供更多的以流程爲中心的界面,並將數據庫表和字段的詳細信息抽象出來,那麼可能需要編寫您自己的視圖。