使用mongoengine实现的Django表单。
项目描述
这是Django模型表单的mongoengine文档实现。
这是一个Jan Schrewe的mongodbforms的分支,它有一些问题,比如保持内容更新,同时也携带了支持古老Django版本的重负。这个分支旨在获得一个更简洁的版本。
要求
Django >= 1.9
mongoengine >= 0.10.0
早期版本可能也能工作,但我们目前没有对它们进行测试。
支持的字段类型
Mongodbforms支持Django表单字段(IntField、TextField等)中具有简单表示的所有字段。此外,它还支持ListFields和MapFields。
文件字段
Mongodbforms处理文件上传与正常Django表单类似。上传的文件使用mongoengine字段存储在GridFS中。因为GridFS没有目录,文件存储在平面空间,如果上传的文件名已存在,则会得到一个唯一的文件名,其形式为<filename>_<unique_number>.<extension>。
容器字段
对于容器字段,如ListFields和MapFields,使用了一个非常简单的控件。控件在相应的字段中渲染容器内容,并附加一个空字段。这样做主要是为了不引入任何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_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
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
django-mongoengine-forms-0.4.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a632f680d464748c76d2e5cc51e2ab92a7f5b04d373d5854339f2a1da656827a |
|
MD5 | 989524b0a6961a8c34edb863baa43646 |
|
BLAKE2b-256 | 605e12c9e4747a3c8feeacebc94f99ab719df12ec639f730465e571f02e85863 |
django_mongoengine_forms-0.4.6-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b9901950aade763ebcdd8c7abd323517cf55aade3614b3078fb7401616b67d1a |
|
MD5 | 0a50d1e89e09a77af1662cfb577340e1 |
|
BLAKE2b-256 | e0be61de3b1a7d19d6cd67f364359e24d4fa5d87435895225f8c709970e0127b |