【问题标题】:ReferenceField and WtformsReferenceField 和 Wtforms
【发布时间】:2014-08-11 00:31:49
【问题描述】:

我遇到了 mongoenginewtforms 的连接问题。

我尝试使用Role class 将权限赋予User class,但我无法将Role class 外键赋予User class

这是我的代码:

# On class File
from mongoengine import Document, StringField, ReferenceField

class User(Document):
    username = StringField(unique=True)
    password = StringField()
    role = RefrenceField(Role, default=Role.objects.get(num=3))

class Role(Document):
    num = IntField()
    name = StringField()

# On form File 
from wtforms import Form, StringField, SelectField

class UserEditForm(Form):
    username = StringField(u'Username', [validators.required()]
    role = SelectField(u'Role', [validators.required()], choices=[(r.id, r.name) for r in Role.objects])

保存时,我收到此错误消息:

ValidationError: ValidationError (User:53a14fb0cdc4674abf452f2d) (A ReferenceField only accepts DBRef or documents: ['role'])

我尝试将r.id 替换为rr._object_key(),但没有结果

谢谢,

【问题讨论】:

    标签: python flask mongoengine flask-wtforms flask-mongoengine


    【解决方案1】:

    我找到了答案:SelectField 没有为ReferenceField 返回好的类型元素。

    这是我的新代码:

    # form File
    class UserEditForm(Form):
      username = StringField(u'Username', [validators.required()])
      role = SelectField(u'Role', [validators.required()], choices=[(r.num, r.name) for r in Role.objects], coerce=int)
    
    # Controller class
    class EditUser(MethodView):
      def get_context(self, id):
        usr = User.objects.get(id=id)
        form = UserEditForm(request.form, usr)
        return {"usr": usr, "form": form}
      def post(self, id):
       context = self.get_context(id)
       form = context.get("form")
       if form.validate():
         usr = context.get("usr")
         form.populate_obj(usr)
         usr.role = Role.objects.get(num=form.role.data)
         usr.save()
         return redirect("/user_edit/" + id)
       return response("form error validation")
    

    祝你有美好的一天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2012-07-16
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多