根据表单是否有效Django使字段为只读?

时间:2013-12-25 17:58:25

标签: django django-forms

我想只在表单有效时(在提交数据之后)才使一个字段只读。 我试图在管理员中覆盖get_readonly_fields,但我无法访问表单。

我有订单。 一旦订单状态更改为“已完成”,我想将所有字段显示为只读(管理员无法编辑表单)。 如果我输入无效数据并将状态更改为“已完成”,则所有字段都将成为只读状态,但会显示错误并且不会更新数据。 我想避免它。我希望只在表单有效且状态设置为“已完成”时才能只读字段。

这可以实现吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将字段设为只读,但仅限于编辑对象时。您确实可以使用get_readonly_fields钩子,因为您将当前对象作为参数objget_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