我在datagrid字段(Collective.z3c.form.datagridfield)中有datagrid 字段
它从前端的角度工作。但是,当我提交表单时,收到的数据如下:
'questions': [{'choices': [], 'questionContent': u'Question 1 ', 'typeOfQ': None}]
Choices是作为空数组返回的第二个数据网格。有没有更好的问题,里面有 n 个选项?我对子表单或小部件的了解不够,不知道创建其中任何一个是否是一个可靠的选择。
这是代码:
class ITableRowSchema(form.Schema):
solution = schema.Bool(
title=u'Correct Answer?', required=False,
)
trueFalse = schema.Choice(
title=u"True or False",
values=[('False'),('True')],
default=('False'),
required=False,
)
choice = schema.Text(title=u"What are the possible choices?",required=False)
class IQuestionSchema(form.Schema):
questionContent = schema.Text(
title=u"What is the question?",
required=False
)
typeOfQ = schema.Choice(
title=u"Question Type",
values=[('True/False'),('Multiple Choice'),('Multiple Select'),('Fill-in-the-Blank'),('Short Answer')],
required=False
)
form.widget(choices=DataGridFieldFactory)
choices = schema.List(title=u"Choices", required=False,
value_type=DictRow(title=u"Choice #", schema=ITableRowSchema))
class IAddContent(model.Schema):
form.widget(questions=BlockDataGridFieldFactory)
questions = schema.List(title=u"8. Create Knowledge Quiz", required=False,
value_type=DictRow(title=u"Questions", schema=IQuestionSchema))
更新: 我发现嵌套的 DGF 从未真正创建过真正的行。如果您启用了自动附加,它们将是 TT 或 AA。这些行在 extractData() 中被忽略。但是,如果您通过遗漏必填字段导致表单触发表单违规。它再次构建表并工作。
修复:确保嵌套的 DGF 获得为其创建的真实行,并且一切正常。 我正在使用:python、z3c.forms、plone