我正在使用带有 mongoengine 的 Mongodb 作为 Django 中 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)