使用mongoengine实现django表单。
mongodbforms的Python项目详细描述
这是django的mongoengine模型表单的实现 文件。
要求
- django>;=1.4
- mongoengine>;=0.8.3
支持的字段类型
mongodbforms支持所有具有简单表示的字段 在django的formfields中(intfield、textfield等)。除此之外 支持ListFields和MapFields。
文件字段
mongodbforms处理文件上传就像处理普通的django表单一样。 上载的文件使用mongoengine字段存储在gridfs中。 因为gridfs没有目录并且将文件存储在平面空间中, 已存在名称的已上传文件得到一个唯一的文件名 表格<filename>_<unique_number>.<extension>。
容器字段
对于像ListFields和MapFields这样的容器字段,非常简单 使用小部件。小部件在 适当的字段加上一个空字段。这主要是为了 引入任何javascript依赖项,后端代码将很高兴 处理任何类型的动态表单,只要字段id是 在post数据中连续编号。
您可以在列表或映射字段中使用任何其他受支持的字段。 包括MongoEngine不支持的FileFields。 在容器字段中。
用法
mongodbforms支持普通文档和嵌入式文档的表单。
正常文件
将mongodbforms与普通文档一起使用,将djangos表单替换为 Mongodbform表单。
frommongodbformsimportDocumentFormclassBlogForm(DocumentForm)...
嵌入文档
对于嵌入文档,请使用EmbeddedDocumentForm。的元对象 表单必须提供嵌入的字段名。嵌入式 对象将附加到此。表单构造函数需要 附加参数:嵌入文档被添加到的文档 还有一个可选的位置参数。
如果没有提供位置,则表单会将新的嵌入文档添加到 如果表单已保存,请列出。编辑存储在列表中的嵌入文档 字段position参数是必需的。如果你提供一个职位 没有使用 位置参数。
如果嵌入字段是纯嵌入字段,则当前对象是 只是覆盖。
# forms.pyfrommongodbformsimportEmbeddedDocumentFormclassMessageForm(EmbeddedDocumentForm):classMeta:document=Messageembedded_field_name='messages'fields=['subject','sender','message',]# views.py# create a new embedded objectform=MessageForm(parent_document=some_document,...)# edit the 4th embedded objectform=MessageForm(parent_document=some_document,position=3,...)
文档
理论上,文档Django’s modelform 文档应该是您所需要的全部(除了一个例外;请阅读 打开)。如果您发现Mongodbforms所做的事情之间存在差异 Django的文档说,你很可能发现了一个bug。 请report it。
表单域生成
因为mongoengine文档上的字段没有形式的概念 fields mongodbform使用生成器类为 未显式设置的数据库字段。
要使用自己的磁场发生器,可以为 在settings.py或 您可以在表单的元类上使用formfield_generator选项。
默认生成器在^{tt10}中定义$ 并且应该可以很容易地覆盖表单字段和小部件。如果你设置 文档窗体上的生成器还可以传递两个dict field_overrides和widget_overrides到__init__。一份清单 查看MongoFormFieldGenerator中的有效键。
# settings.py# set the fieldgeneretor for the whole applicationMONGODBFORMS_FIELDGENERATOR='myproject.fieldgenerator.GeneratorClass'# generator.pyfrommongodbforms.fieldgeneratorimportMongoFormFieldGeneratorclassMyFieldGenerator(MongoFormFieldGenerator):...# forms.pyfrommongodbformsimportDocumentFormfromgeneratorimportMyFieldGeneratorclassMessageForm(DocumentForm):classMeta:formfield_generator=MyFieldGenerator