0

私はモデルを持っています:

from flask.ext.security import currennt_user
#instance of LocalProxy wrapped model User(db.Document)

class ContactModel(db.Document, SomeMixin):
    user = db.ReferenceField(User, verbose_name='User', required=True)

そして、ReferenceField の奇妙な動作に直面しました。次のコードが機能する理由:

model = ContactModel(user = current_user.pk, ....)

そして従わない:

model = ContactModel()
model.user = current_user.pk

私がしようとしたときの同じ問題: model = ContactModel() model.user = current_user

コードの最後の 2 つの部分でエラーがスローされます。ValidationError: ValidationError (ContactModel:None) (A ReferenceField only accepts DBRef or documents: ['user'])

4

1 に答える 1

3

current_user.pkタイプがありますObjectId(id のみで、コレクションに関する情報はありません)。

current_userLocalProxyタイプがあります。

ObjectIdthis の参照コレクションと mongo の使用に関する情報がないため、参照を as として保存できませんBDRef

DBRefメソッドを使用して、mongoengine ドキュメントからオブジェクトを取得できますDocument.to_dbref

そのため、mognoenginge チェック タイプをDBRef明示的に取得するか、ドキュメントから取得しto_dbrefます。

オブジェクトを取得するか、実際のオブジェクトを取得するために呼び出すcurrent_userことができます。to_dbrefDBRef_get_current_object()User

于 2013-09-15T06:58:32.987 に答える