Сериализация DynamicField

У меня есть модель:

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

И сериализатор для него:

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

Поле "диапазон" может быть диктом или списком. Но, когда я делаю сериализацию, я получил только строку в это поле:

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

Как я могу получить список или диктовать после сериализации?

1 ответ

Решение

Вы можете сделать это с помощью метода python eval и DRF SerializerMethodField.

Попробуй это.

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
Другие вопросы по тегам