Довольно легко написать собственный сериализатор, который справляется с ObjectIds.Django уже включает в себя тот, который обрабатывает десятичные дроби и даты, поэтому вы можете расширить это:
from django.core.serializers.json import DjangoJSONEncoder
from bson import objectid
class MongoAwareEncoder(DjangoJSONEncoder):
"""JSON encoder class that adds support for Mongo objectids."""
def default(self, o):
if isinstance(o, objectid.ObjectId):
return str(o)
else:
return super(MongoAwareEncoder, self).default(o)
Теперь вы можете просто указать json
использовать ваш собственный сериализатор:
thejson = json.dumps({'results':posts}, cls=MongoAwareEncoder)