使用Django Forms来显示和编辑?

Dou*_*ank 7 django django-forms

我正在努力解决如何在Django中最好地创建可以用于显示或编辑数据的HTML页面.也就是说,我希望字段的值在显示模式下显示为文本,但在编辑/添加模式时显示在它们的小部件中.似乎Django不是为此而设计的:字段总是出现在它们的小部件中(例如,文本输入,文本区域等).

是否有一种常用的技术来处理这种情况,而不是使用一种形式,而不是另一种?

我在想一个可以用于每个表单字段的自定义模板标签过滤器,例如:

{{form.field_name | render_field:mode}}

其中render_field将根据模式返回字段的HTML小部件,或仅返回值作为文本.

我错过了什么,或者这是一个可行的解决方案吗?

Dou*_*ank 5

显然,回答我自己的问题。我最终得到了一个由三部分组成的解决方案:

  1. 将模型附加到表单,因此我将为每个字段设置默认显示小部件
  2. 使用模板标签编写表单,将 form.field、用户和操作传递给它
  3. 编写一个渲染模板标签来处理 #2

步骤1:

form.model = 模型(...)

第二步:

 {{form.field1.label}}
 {% 渲染 form.field1 用户操作 %}


 {{form.field2.label}}
 {% 渲染 form.field2 用户操作 %}

第三步:

就像是:

def render(formfield, user, action, default_text="Private"):
    如果不是 user.is_authenticated():
        动作=“查看”
    如果动作==“查看”:
        如果 user.is_authenticated():
            字段名 = formfield.name 
            retval = str(getattr(formfield.form.model, fieldname))
        别的:
            retval = default_text
    别的:
        retval = formfield.as_widget()
    返回值