如何使用Deform和Colander实现文件上传可选?

9 投票
1 回答
1731 浏览
提问于 2025-04-16 20:45

我想要创建一个表单,这个表单里包含一系列文件,代表一个产品的不同图片。提供这些文件是可选的,所以即使没有文件,表单也应该能通过验证。我该怎么做呢?

这是我使用的colander模式:

    import colander
    import deform
    from deform import Form
    from deform import ValidationFailure
    from deform.interfaces import FileUploadTempStore 


    tmpstore = FileUploadTempStore()

    class Image(colander.Schema):
        image = colander.SchemaNode(
            deform.FileData(),
            widget=deform.widget.FileUploadWidget(tmpstore)
            ) 

    class Images(colander.SequenceSchema):
        images = Image()

    class ProductSchema(colander.Schema):
        completename = colander.SchemaNode(colander.String(), title="Complete Name")

        description = colander.SchemaNode(colander.String(), 
                                 widget = deform.widget.TextAreaWidget())

        images = Images()


    schema = ProductSchema()
    form = Form(schema, buttons=("submit", ))

我试着添加一个'missing'参数,像这样:

image = colander.SchemaNode(
        deform.FileData(),
        missing = ???
        widget=deform.widget.FileUploadWidget(tmpstore)
        ) 

我觉得当我这样做的时候,似乎可以正常工作:

missing={'filename': None, 'uid':None}

但我真的不确定这样做是否正确……

谢谢!

1 个回答

5

你可以试试用“missing = colander.null”。

撰写回答