0

Flask バックエンドで参照フィールドを逆参照し、その特定のフィールドが逆参照された完全なオブジェクトを返そうとしています。

逆参照しようとしているフィールドは、次のように定義されています。

vouches_received = db.ListField(db.ReferenceField('Vouch'))

逆参照しようとしている方法は次のとおりです。

unverified_vouches = []
for vouch in usr.vouches_received:
    unverified_vouches.append(vouch.to_mongo())

usr.vouches_received = unverified_vouches

ただし、次に行う場合:

usr.to_json()

オブジェクトでは、次のように ValidationError を取得します。

ValidationError: u'{...}' is not a valid ObjectId, it must be a
12-byte input of type 'str' or a 24-character hex string

3 つのドット (...) は、基本的に逆参照されたドキュメントです。ほとんどの場合、文字列、日付フィールド、および逆参照したくないその他の参照フィールドがあります。

参照フィールドの ObjectID が必要であるため、これが有効なエラーであることは認識していますが、そのフィールドの逆参照に成功してドキュメントを返すにはどうすればよいかという疑問が生じます。

ありがとう

4

1 に答える 1

1

ListField要素が必要でObjectIdあり、それらを逆参照したため、そのエラーがスローされます。これが最もエレガントな方法かどうかはわかりませんが、 を に変換してusr.to_json()から、後でリストを遅延リストにdict置き換えることはできますか? テストはできませんが、次のようになります。vouches_received

user_dict = json.loads(usr.to_json())

unverified_vouches = []
for vouch in usr.vouches_received:
    user_dict['vouches_received'].append(vouch.to_mongo())

usr_json = json.dumps(user_dict)

より良い解決策は、EmbededDocument を使用することです。

于 2015-06-10T15:09:46.647 に答える