Uso Mongodb con mongoengine come backend per un'API in Django. Il framework che sto usando per creare l'api è Django Rest Framework.Dizionario dizionario restituzione Django Campo
Ho bisogno di memorizzare un dizionario in un campo in Mongo e il meglio che ho fatto quando viene chiamato il metodo è di usare un campo di dati e analizzare il dizionario nella funzione oggetto restore.
C'è un modo migliore per raggiungere questo obiettivo?
È preferibile creare un campo Dict? Non so quanto possa essere difficile.
Grazie.
modificato per mostrare del codice, notare che il dizionario viene memorizzato come dict (DictField) e il suo contenuto può cambiare da un oggetto all'altro.
mio modello mongoengine è qualcosa di simile:
class MyDoc(mongoengine.Document):
name = mongoengine.StringField(max_length=200)
context = mongoengine.DictField()
e la mia serializzatore qualcosa di simile:
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)
si potrebbe pubblicare il tuo definizioni del documento e del codice? Penso che sarebbe utile – dm03514
Puoi usare i serializzatori pymongo - vedi: http://api.mongodb.org/python/current/api/bson/json_util.html – Ross
Nel 2016 puoi usare Django-REST-Framework-Mongoengine (https://github.com/umutbozkurt/django-rest-framework-mongoengine), che fornisce i serializzatori per i documenti Mongoengine immediatamente disponibili. –