python – WTForms中的Mongoengine,Flask和ReferenceField

前端之家收集整理的这篇文章主要介绍了python – WTForms中的Mongoengine,Flask和ReferenceField前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Hy大家,
我正在实现一个Flask / MongoDB项目,因为我是这个世界的新手,我已经按照本页的教程进行了操作:
http://docs.mongodb.org/ecosystem/tutorial/write-a-tumblelog-application-with-flask-mongoengine/

之后,我开始编写自己的应用程序代码,这是代码的一部分:

楷模:

class Generic(db.Document):
    descrizione = db.StringField(max_length=255,required=True)

    Meta = {
        'allow_inheritance': True,'indexes': [
            {'fields': ['descrizione'],'unique': True}
        ]
    }

class Category(Generic):
    def __call__(self,*args):
        pass

class User(db.Document):
    email = db.EmailField(max_length=255,required=True)
    nickname = db.StringField(max_length=255,required=True)
    password = db.StringField(max_length=16,required=True)
    categoria = db.ReferenceField('Category',required=True)

    Meta = {
        'indexes': [
            {'fields': ['nickname','email'],'unique': True}
        ]
    }

如上所示,我有一个继承“Generic”类的“Category”类. “User”类最后有一个ReferenceField属于Category.这样,当我创建用户时,mongo db上的category字段存储为ObjectID,与“generic”集合相关,该集合具有我创建的所有类别.

下一步是创建表单以将新文档插入到用户集合中.
在我的Views python文件中我有这个cose:

def iscrizione():

    form = model_form(User,only=['email','nickname','password','categoria'])(request.form)

    if request.method == 'GET':
        ctx = {
            'form': form
        }
        return render_template('users/iscrizione.html',**ctx)

该模板使用教程页面中报告的Jinja宏:

{% macro render(form) -%}

最后,这是我的问题
(如果你已经达到这个文本,你就是我的英雄)

当我使用呈现的表单访问网页时,宏正确显示文本字段,而对于我的模型中的ReferenceField,它显示一个组合框.
select组合中的选项值与我创建的类别文档的对象ID完全对齐.选择其中一个并提交表单,我的应用程序正确创建新的用户文档.

不幸的是,选择框标签没有显示人类可读的值,报告“类别对象”.