我有一个模型Order
和模型Invoice
。 Order
有
invoice = models.OneToOneField('Invoice', related_name='order', on_delete=models.CASCADE, blank=True, null=True)
在创建订单对象后立即创建发票对象。管理员必须在客户付款之前编辑发票(价格字段)。
问题在于Django-admin
允许管理员也改变这个字段(图像的底部),我不能冒险,但我想让铅笔图标(更改发票的属性)。
有可能吗?当我在invoice
中将readonly_fields
添加到OrderAdmin
时,管理员无法修改诸如invoice.price等属性。
编辑:
所以我希望管理员能够编辑发票的属性。不添加也不从下拉列表中选择。
答案 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)
def has_add_permission(self, request):
return False
Django admin: How to display a field that is marked as editable=False' in the model?