我想只在表单有效时(在提交数据之后)才使一个字段只读。
我试图在管理员中覆盖get_readonly_fields
,但我无法访问表单。
我有订单。 一旦订单状态更改为“已完成”,我想将所有字段显示为只读(管理员无法编辑表单)。 如果我输入无效数据并将状态更改为“已完成”,则所有字段都将成为只读状态,但会显示错误并且不会更新数据。 我想避免它。我希望只在表单有效且状态设置为“已完成”时才能只读字段。
这可以实现吗?
答案 0 :(得分:0)
如果我理解正确,您希望将字段设为只读,但仅限于编辑对象时。您确实可以使用get_readonly_fields
钩子,因为您将当前对象作为参数obj
:get_readonly_fields(self, request, obj=None)
。所以if obj is None
,你正在添加一个对象,否则,你正在编辑。例如:
class YourAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if obj is None:
return self.readonly_fields
else:
return ["your_special_field"] + self.readonly_fields