DjangoのAPIのバックエンドとしてmongoengineでMongodbを使用しています。API の作成に使用しているフレームワークは Django Rest Framework です。
Mongo のフィールドにディクショナリを格納する必要があります。メソッド post が呼び出されたときに行った最善の方法は、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)