Search code examples
djangodjango-mongodb-engine

Serialize DynamicField


I have some model:

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

And serializer for it:

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

Field 'range' can be a dict or list. But, when I do serialize I got only string to this field:

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

How can I get list or dict after serialize?


Solution

  • You can do that with python eval's method and DRF SerializerMethodField.

    Try this.

    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