Mike
Mike

Reputation: 878

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?

Upvotes: 0

Views: 347

Answers (1)

Bipul Jain
Bipul Jain

Reputation: 4643

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

Upvotes: 1

Related Questions