장고의 API 백엔드로 mongoengine과 함께 Mongodb를 사용하고 있습니다. API를 생성하기 위해 사용하고있는 프레임 워크는 Django Rest Framework입니다.Django Rest 프레임 워크 사전 필드
Mongo의 필드에 사전을 저장할 필요가 있습니다. 메소드 게시가 호출 될 때 수행 한 최선의 작업은 charfield를 사용하고 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)
http://www.django-rest-framework.org/api-guide/fields/#dictfield 당신이 문서의 정의와 몇 가지 코드를 게시 할 수 있을까? 나는 그것이 도움이 될 것이라고 생각한다 – dm03514
당신은 pymongo 시리얼 라이저를 사용할 수있다 - http://api.mongodb.org/python/current/api/bson/json_util.html – Ross
2016 년에는 Django-REST-Framework-Mongoengine을 사용할 수있다. (https://github.com/umutbozkurt/django-rest-framework-mongoengine), 당신의 몽고어 문서에 대한 시리얼 라이저를 제공합니다. –