存储现场数据的位置以及如何提供对它的访问?

时间:2010-07-06 04:03:47

标签: python design-patterns

FormsFieldsFieldsvalue。但是,在提交表单后,他们只会获得value

  1. 我该如何存储这个值?我应该为每个字段赋予值属性field.value
    • 在发布之前将其保留为None,并将其填入后续字词中?
    • 完全省略,并动态添加它?
    • 将其存储在表单上,​​例如form.data['field']
    • 创建一个包装类FieldWithData以避免任何不一致的状态(如果你有这种类型的对象,你知道它有数据)并允许我在初始化器中设置数据而不是直接访问属性(尽管我想这与使用setter没有太大区别)
  2. 如何通过Form对象提供对字段数据的访问权限?选项:
    • form.fields['name'].value(目前如何在内部存储)
    • form.data['field'](创建一个代理“数据”类,从字段中检索实际数据,或重新安排内部实际存储数据,如此)
    • form.field.value - 看起来相当不错,但后来我对同一个字段有两个引用,一个作为form.field,一个作为form.fields['field'],我需要在内部使我可以迭代在他们身上
  3. 太多的设计决策。使我抓狂。这就是关于单独一个项目的琐事。

2 个答案:

答案 0 :(得分:1)

这实际上取决于您与相关结构的互动方式。在为其分配值之前,您是否操纵FormField个对象?您是否需要经常迭代所有给定的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请求中获取提交的数据。该方法还可以执行验证和数据类型转换等操作。