使用 Django Forms 来显示和编辑?

2023-12-22

我正在研究如何在 Django 中最好地创建可用于显示或编辑数据的 HTML 页面。也就是说,我希望字段的值在显示模式下显示为文本,但在编辑/添加模式下显示在其小部件中。看来 Django 的设计初衷并不是这样做:这些字段总是出现在它们的小部件中(例如,文本输入、文本区域、 ETC)。

是否有一种通用的技术来处理这个问题,除了使用一个表单而不使用另一个表单之外?

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

{{ form.field_name|render_field:mode }}

其中 render_field 将根据模式返回字段的 HTML 小部件,或者仅返回文本形式的值。

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


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

  1. 将模型附加到表单,这样我将为每个字段提供默认的显示小部件
  2. 使用模板标签编写表单,并向其传递 form.field、用户和操作
  3. 编写一个渲染模板标签来处理#2

步骤1:



form.model = Model(...)
  

第二步:




 {{form.field1.label}}
 {% render form.field1 user action %}


 {{form.field2.label}}
 {% render form.field2 user action %}

  

第三步:

就像是:



def render(formfield, user, action, default_text="Private"):
    if not user.is_authenticated():
        action = "view"
    if action == "view":
        if user.is_authenticated():
            fieldname = formfield.name 
            retval = str(getattr(formfield.form.model, fieldname))
        else:
            retval = default_text
    else:
        retval = formfield.as_widget()
    return retval
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Django Forms 来显示和编辑? 的相关文章

随机推荐