2017-02-08 2 views
0

ich einige Modell haben:Serialize Dynamic

class Settings(mongoengine.Document): 
    name = mongoengine.StringField() 
    range = mongoengine.DynamicField() 

Und Serializer für sie:

class SettingsSerializer(serializers.DocumentSerializer): 
    class Meta: 
     model = Settings 
     fields = [ 
      'name', 
      'range' 
     ] 

Feld 'Bereich' kann ein dict oder Liste sein. Aber, wenn ich serialisiert ich nur String in diesem Bereich erhielt:

{ 
"name": "hello world", 
"range": "{'max': 100, 'min': 0}", 
} 

Wie kann ich Liste oder dict nach serialize?

Antwort

1

Sie können dies mit Python Evals Methode und DRF SerializerMethodField tun.

Versuchen Sie dies.

from rest_framework import serializers as drf_serailizer 

class SettingsSerializer(serializers.DocumentSerializer): 
    range = drf_serailizer.SerializerMethodField() 

    class Meta: 
     model = Settings 
     fields = [ 
      'name', 
      'range' 
     ] 

    def get_range(self, object): 
     try: 
      return eval(object.range) 
     except: 
      return None 
+0

Ich habe Fehler: Attribute: Modul 'rest_framework_mongoengine.serializers' hat kein Attribut 'SerializerMethodField' – Mike

+0

hmm Sie Mongo Serializer verwenden. Können Sie den Update-Code ausprobieren? Ich habe Django Rest Framework Serializer mit einem anderen Namen importiert –