Forms
有Fields
,Fields
有value
。但是,在提交表单后,他们只会获得value
。
field.value
,
None
,并将其填入后续字词中? form.data['field']
。 FieldWithData
以避免任何不一致的状态(如果你有这种类型的对象,你知道它有数据)并允许我在初始化器中设置数据而不是直接访问属性(尽管我想这与使用setter没有太大区别)Form
对象提供对字段数据的访问权限?选项:
form.fields['name'].value
(目前如何在内部存储)form.data['field']
(创建一个代理“数据”类,从字段中检索实际数据,或重新安排内部实际存储数据,如此)form.field.value
- 看起来相当不错,但后来我对同一个字段有两个引用,一个作为form.field
,一个作为form.fields['field']
,我需要在内部使我可以迭代在他们身上太多的设计决策。使我抓狂。这就是关于单独一个项目的琐事。
答案 0 :(得分:1)
这实际上取决于您与相关结构的互动方式。在为其分配值之前,您是否操纵Form
和Field
个对象?您是否需要经常迭代所有给定的Fields
?一旦提交,您需要Form
吗?等
我建议编写使用Form
的部分/全部代码,并弄清楚想要与Form
数据进行交互的方式,以及理想的界面看起来像。
答案 1 :(得分:1)
我会保留表单的定义,并将表单的值与提交分开。即我不会在Field(Definition)对象上有value
属性。
要使用提交的值,我可能会使用dict。你可以让Form类处理这个dict的创建:
# assuming my_form is a Form object and request represents the HTTP request
form_values = my_form.values_from_request(request)
print(form_values["Name"])
values_from_request
方法将遍历表单的字段(定义)以从HTTP请求中获取提交的数据。该方法还可以执行验证和数据类型转换等操作。