【问题标题】:Serialize DynamicField序列化动态字段
【发布时间】:2017-02-08 11:07:52
【问题描述】:

我有一些模型:

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}",
}

序列化后如何获取列表或字典?

【问题讨论】:

    标签: django django-mongodb-engine


    【解决方案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
    

    【讨论】:

    • 我收到错误:AttributeError: module 'rest_framework_mongoengine.serializers' has no attribute 'SerializerMethodField'
    • 嗯,您正在使用 mongo 序列化程序。你可以试试更新代码。我已经导入了不同名称的 django rest 框架序列化程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多