Mongodb'u Django'da bir API için arka uç olarak mongoengine ile kullanıyorum. API oluşturmak için kullandığım çerçeve Django Rest Framework'dür.Django Rest Framework Sözlük Alanı
Mongo'da bir alanda bir sözlük saklamam gerekiyor ve yöntem gönderimi çağrıldığında yaptığım en iyi şey bir charfield kullanmak ve restore_object işlevindeki sözlüğü ayrıştırmaktır.
Bu hedefe ulaşmak için daha iyi bir yol var mı?
Bir dict alanı oluşturmak daha mı iyi? Bunun ne kadar zor olabileceğini bilmiyorum.
Teşekkür ederiz. Bazı kodları gösterecek şekilde düzenlenmiş, sözlüğü bir dict (DictField) olarak sakladığımı ve içeriğin bir nesneden diğerine değişebileceğine dikkat edin.
benim mongoengine modelidir gibi bir şey:
class MyDoc(mongoengine.Document):
name = mongoengine.StringField(max_length=200)
context = mongoengine.DictField()
ve benzeri benim serileştirici şey:
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 Eğer belge tanımları ve bazı kod sonrası olabilir? Ben faydalı olacağını düşünüyorum – dm03514
Sen pymongo serileştiriciler kullanabilirsiniz - bkz: http://api.mongodb.org/python/current/api/bson/json_util.html – Ross
2016 yılında Django-REST-Framework-Mongoengine kullanabilirsiniz (https://github.com/umutbozkurt/django-rest-framework-mongoengine), Mongoengine Belgeleriniz için serileştiriciler sağlayan kutudan çıktı. –