Имам клас със списък от ReferenceFields, нещо като това:
class MyClass(db.Document):
meta = {
...
}
something: ReferenceField(OtherClass, required=True, reverse_delete_rule=CASCADE)
otherthings = SortedListField(ReferenceField(AnotherClass), ordering='id')
Мога да създам обект на MyClass и той работи перфектно:
>>> h
<MyClass: MyClass object>
>>> h.id
ObjectId('54cf8f91b0ab4a2b7c5a71b6')
>>> h.otherthings
[<AnotherClass: AnotherClass(pk=54cf8fbeb0ab4a2d35631cf0)>, <AnotherClass: AnotherClass(pk=54cf8fc7b0ab4a2bd7abfe78)>, <AnotherClass: AnotherClass(pk=54cf8fd3b0ab4a2bda781fd5)>, <AnotherClass: AnotherClass(pk=54cf8fd3b0ab4a2b7c5a71b9)>, <AnotherClass: AnotherClass(pk=54cf8ffbb0ab4a2fa167f335)>, <AnotherClass: AnotherClass(pk=54cf9001b0ab4a2fcc6ae982)>, <AnotherClass: AnotherClass(pk=54cf9001b0ab4a2fcc6ae983)>, <AnotherClass: AnotherClass(pk=54cf9001b0ab4a3170f6cc00)>, <AnotherClass: AnotherClass(pk=54cf9002b0ab4a31566e9837)>, <AnotherClass: AnotherClass(pk=54cf9002b0ab4a2ffc13b055)>]
Но трябва да го върна чрез Flask, така че се опитвам да стартирам to_json(), но не работи:
>>> h.to_json()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lala/whatever/.virtualenvs/whatever/local/lib/python2.7/site-packages/mongoengine/base/document.py", line 327, in to_json
return json_util.dumps(self.to_mongo(), *args, **kwargs)
File "/home/lala/whatever/.virtualenvs/whatever/local/lib/python2.7/site-packages/mongoengine/base/document.py", line 255, in to_mongo
value = field.to_mongo(value)
File "/home/lala/whatever/.virtualenvs/whatever/local/lib/python2.7/site-packages/mongoengine/fields.py", line 739, in to_mongo
reverse=self._order_reverse)
TypeError: 'ObjectId' object has no attribute '__getitem__'
какво правя грешно Бих искал отговорът да е нещо като:
>>> h.to_json()
'{"_id": {"$oid": "54cf8f91b0ab4a2b7c5a71b6"}, "something": {"$oid": "54c20742b0ab4a5e4c08f5c7"}, "otherthings": [ "_id": {"$oid": "54cf8fbeb0ab4a2d35631cf0"}, "_id": {"$oid": "54cf8fc7b0ab4a2bd7abfe78"}, "_id": {"$oid": "54cf8fd3b0ab4a2bda781fd5"}, "_id": {"$oid": "54cf8fd3b0ab4a2b7c5a71b9"}, "_id": {"$oid": "54cf8ffbb0ab4a2fa167f335"}, "_id": {"$oid": "54cf9001b0ab4a2fcc6ae982"}, "_id": {"$oid": "54cf9001b0ab4a2fcc6ae983"}, "_id": {"$oid": "54cf9001b0ab4a3170f6cc00"}, "_id": {"$oid": "54cf9002b0ab4a31566e9837"}, "_id": {"$oid": "54cf9002b0ab4a2ffc13b055"} ] }'
И ако е възможно да се извлекат референтните обекти (dereference?) от ReferenceFields, би било чудесно.