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完全对齐.选择其中一个并提交表单,我的应用程序正确创建新的用户文档.
不幸的是,选择框标签没有显示人类可读的值,报告“类别对象”.
最佳答案
最后我做到了!
假设User文档的“categoria”字段是“Category”集合的ReferenceField.
只需使用您想要作为标签的Category模型的字段名称将“label_attr”属性添加到“form.categoria”.
假设User文档的“categoria”字段是“Category”集合的ReferenceField.
只需使用您想要作为标签的Category模型的字段名称将“label_attr”属性添加到“form.categoria”.
def iscrizione():
form = model_form(User,'categoria'])(request.form)
form.categoria.label_attr='descrizione' #<< add this line
if request.method == 'GET':
ctx = {
'form': form
}
return render_template('users/iscrizione.html',**ctx)