跳转到主要内容

使用mongoengine实现的Django表单。

项目描述

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

这是一个Jan Schrewe的mongodbforms的分支,它有一些问题,比如保持内容更新,同时也携带了支持古老Django版本的重负。这个分支旨在获得一个更简洁的版本。

要求

早期版本可能也能工作,但我们目前没有对它们进行测试。

支持的字段类型

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

文件字段

Mongodbforms处理文件上传与正常Django表单类似。上传的文件使用mongoengine字段存储在GridFS中。因为GridFS没有目录,文件存储在平面空间,如果上传的文件名已存在,则会得到一个唯一的文件名,其形式为<filename>_<unique_number>.<extension>

容器字段

对于容器字段,如ListFieldsMapFields,使用了一个非常简单的控件。控件在相应的字段中渲染容器内容,并附加一个空字段。这样做主要是为了不引入任何JavaScript依赖,后端代码将愉快地处理任何类型的动态表单,只要字段ID在POST数据中连续编号。

您可以在列表或映射字段中使用任何其他支持的字段。包括在容器字段中不真正由mongoengine支持的FileFields

使用方法

mongodbforms支持普通文档和嵌入文档的表单。

普通文档

要使用mongodbforms与普通文档,用mongodbform表单替换djangos表单。

from mongodbforms import DocumentForm

class BlogForm(DocumentForm)
    ...

嵌入文档

对于嵌入文档,使用EmbeddedDocumentForm。表单的Meta对象必须提供嵌入字段名。嵌入对象附加到该字段。表单构造函数接受一些附加参数:要添加嵌入文档的文档和一个可选的位置参数。

如果没有提供位置,表单将在保存时将新的嵌入文档添加到列表中。要编辑存储在列表字段中的嵌入文档,需要位置参数。如果您提供了位置但没有向表单提供实例,则实例将自动使用位置参数加载。

如果嵌入字段是普通嵌入字段,当前对象将被简单覆盖。

# 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使用一个生成器类来为db字段生成表单字段,该字段没有明确设置。

要使用自己的字段生成器,您可以在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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

django-mongoengine-forms-0.4.6.tar.gz (29.1 kB 查看哈希值)

上传时间 源代码

构建分发

django_mongoengine_forms-0.4.6-py2.py3-none-any.whl (28.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持