【发布时间】:2013-01-15 15:26:17
【问题描述】:
我在 Django 中使用 Mongodb 和 mongoengine 作为 API 的后端。 我用来创建 api 的框架是 Django Rest Framework。
我需要在 Mongo 的一个字段中存储一个字典,当调用 post 方法时我所做的最好的事情是使用一个字符字段并在函数 restore_object 中解析字典。
有更好的方法来实现这个目标吗?
最好创建一个dict字段?我不知道这有多难。
谢谢。
编辑显示一些代码,请注意我将字典存储为 dict (DictField),它的内容可能会从一个对象更改为另一个对象。
我的 mongoengine 模型类似于:
class MyDoc(mongoengine.Document):
name = mongoengine.StringField(max_length=200)
context = mongoengine.DictField()
和我的序列化器类似:
class MyDocSerializer(serializers.Serializer):
name = serializers.CharField(max_length=200)
context = serializers.CharField()
url = serializers.HyperlinkedIdentityField(
view_name="drf:mydoc-detail",)
def __init__(self,*args,**kwargs):
super(MyDocSerializer,self).__init__(*args,**kwargs)
def restore_object(self, attrs, instance=None):
# Parse string to dict
# this is so ugly, notice I had to repace ' for " to
# avoid an error parsing the json
context = JSONParser().parse(
StringIO.StringIO(
attrs['context'].replace("'","\"")
)
)
attrs['context'] = context
if instance is not None:
instance.name = attrs['name']
instance.context = context
return instance
return MyDoc(**attrs)
【问题讨论】:
-
您能发布您的文档定义和一些代码吗?我认为这会有所帮助
-
您可以使用 pymongo 序列化程序 - 请参阅:api.mongodb.org/python/current/api/bson/json_util.html
-
在 2016 年,您可以使用 Django-REST-Framework-Mongoengine (github.com/umutbozkurt/django-rest-framework-mongoengine),它为您的 Mongoengine 文档提供开箱即用的序列化程序。
标签: django mongodb mongoengine django-rest-framework