私はMongoengineをDjangoのAPIのバックエンドとして使用しています。 私はAPIを作成するために使用しているフレームワークはDjango Rest Frameworkです。Django Rest Framework Dictionaryフィールド
私はMongoのフィールドに辞書を格納する必要があり、メソッドpostが呼び出されたときに私がした最高のことは、charfieldを使用してrestore_object関数で辞書を解析することです。
この目標を達成するより良い方法がありますか?
dictフィールドを作成する方が良いですか?これがどれほど難しいかわかりません。
ありがとうございます。
一部のコードを表示するように編集しました。辞書を辞書(DictField)として保存していて、コンテンツがあるオブジェクトから別のオブジェクトに変更される可能性があることに注意してください。
class MyDoc(mongoengine.Document):
name = mongoengine.StringField(max_length=200)
context = mongoengine.DictField()
など私のシリアライザ何か:
私mongoengineモデルのようなものである
シリアライザのrestore_object
で
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)
を使用することができ、あなたの文書定義といくつかのコードを投稿できますか?私はそれが役に立ちそうだと思う – 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)、あなたのモンゴエン文書のシリアライザをすぐに提供します。 –