【问题标题】:Make field read-only based on whether form is valid Django?根据表单是否有效 Django 将字段设为只读?
【发布时间】:2013-12-25 17:58:24
【问题描述】:

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

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

这可以实现吗?

【问题讨论】:

  • 你必须解释你的意思。一旦表单有效,您通常不会再显示它。
  • 请看我更新的帖子。

标签: django django-forms


【解决方案1】:

如果我理解正确,您希望将字段设为只读,但仅限于编辑对象时。您确实可以为此使用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

【讨论】:

  • 这适用于所有表格。如果表单有效,我需要将字段设置为只读。
  • 但是如果表单是有效的,用户甚至不会看到它,对吧?因为管理员之后会保存并重定向...
  • 管理员可以打开它并查看提交数据的详细信息。查看我更新的帖子。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2015-05-27
  • 2018-06-12
  • 2016-03-25
  • 2012-07-29
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多