使用mongoengine实现的django表单。
项目描述
这是django模型表单的mongoengine文档实现。
需求
Django >= 1.4
mongoengine >= 0.8.3
支持的字段类型
Mongodbforms支持Django表单字段中具有简单表示的所有字段(IntField,TextField等)。此外,它还支持ListFields和MapFields。
文件字段
Mongodbforms像正常Django表单一样处理文件上传。上传的文件使用mongoengine字段存储在GridFS中。由于GridFS没有目录,并将文件存储在一个平面空间中,因此如果已存在同名文件,上传的文件将获得一个具有以下格式的唯一文件名:<filename>_<unique_number>.<extension>。
容器字段
对于像ListFields和MapFields这样的容器字段,使用了一个非常简单的小部件。该小部件将容器内容渲染到适当的字段中,并添加一个空字段。这主要是为了不引入任何JavaScript依赖项,后端代码将愉快地处理任何类型的动态表单,只要字段ID在POST数据中连续编号。
您可以在列表或映射字段中使用任何其他支持的字段。包括FileFields,这些字段在容器字段中实际上并不由mongoengine支持。
用法
mongodbforms支持普通文档和嵌套文档的表单。
普通文档
要使用mongodbforms与普通文档一起使用,请用mongodbform表单替换djangos表单。
from mongodbforms import DocumentForm
class BlogForm(DocumentForm)
...
嵌套文档
对于嵌入式文档,请使用 EmbeddedDocumentForm。表单的元对象需要提供一个嵌入式字段名称。嵌入式对象将附加到该字段。表单构造函数接受一些额外的参数:要将嵌入式文档添加到的文档以及可选的位置参数。
如果没有提供位置参数,则表单在保存时会将新的嵌入式文档添加到列表中。要编辑存储在列表字段中的嵌入式文档,需要位置参数。如果您为表单提供了位置但没有实例,则将自动使用位置参数加载实例。
如果嵌入式字段是一个普通的嵌入式字段,当前对象将被简单地覆盖。
# forms.py
from mongodbforms import EmbeddedDocumentForm
class MessageForm(EmbeddedDocumentForm):
class Meta:
document = Message
embedded_field_name = 'messages'
fields = ['subject', 'sender', 'message',]
# views.py
# create a new embedded object
form = MessageForm(parent_document=some_document, ...)
# edit the 4th embedded object
form = MessageForm(parent_document=some_document, position=3, ...)
文档说明
理论上,Django的modelform文档应该是您所需的所有内容(除了一项例外;请继续阅读)。如果您发现mongodbforms与Django文档之间存在差异,您可能已发现一个错误。请报告它。
表单字段生成
由于mongoengine文档中的字段没有表单字段的概念,mongodbform使用一个生成器类来生成为数据库字段生成的表单字段,该字段没有明确设置。
要使用自己的字段生成器,您可以在settings.py中设置一个用于整个项目的生成器,使用MONGODBFORMS_FIELDGENERATOR,或者您可以在表单的Meta类上使用formfield_generator选项。
默认生成器在mongodbforms/fieldgenerator.py中定义,并应使覆盖表单字段和小部件变得容易。如果您在文档表单上设置了生成器,您还可以传递两个字典field_overrides和widget_overrides到__init__。有关有效键的列表,请参阅MongoFormFieldGenerator。
# settings.py
# set the fieldgeneretor for the whole application
MONGODBFORMS_FIELDGENERATOR = 'myproject.fieldgenerator.GeneratorClass'
# generator.py
from mongodbforms.fieldgenerator import MongoFormFieldGenerator
class MyFieldGenerator(MongoFormFieldGenerator):
...
# forms.py
from mongodbforms import DocumentForm
from generator import MyFieldGenerator
class MessageForm(DocumentForm):
class Meta:
formfield_generator = MyFieldGenerator
项目详细信息
mongodbforms-0.3.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e8e3326f5b689074a443404130c6b780539134049ba985025cf5135a2f642458 |
|
MD5 | e4d1ffb6d22b04efb1d4e2e405cddaa5 |
|
BLAKE2b-256 | 50cc00fa38133b97a4f0a9faa7a92d0f5058713d75c4f58e62be64301e5c2176 |