跳转到主要内容

使用mongoengine实现的django表单。

项目描述

这是django模型表单的mongoengine文档实现。

需求

支持的字段类型

Mongodbforms支持Django表单字段中具有简单表示的所有字段(IntField,TextField等)。此外,它还支持ListFieldsMapFields

文件字段

Mongodbforms像正常Django表单一样处理文件上传。上传的文件使用mongoengine字段存储在GridFS中。由于GridFS没有目录,并将文件存储在一个平面空间中,因此如果已存在同名文件,上传的文件将获得一个具有以下格式的唯一文件名:<filename>_<unique_number>.<extension>。

容器字段

对于像ListFieldsMapFields这样的容器字段,使用了一个非常简单的小部件。该小部件将容器内容渲染到适当的字段中,并添加一个空字段。这主要是为了不引入任何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_overrideswidget_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 (24.7 kB 查看散列)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面