茄子焦糖 2024-09-20 17:24 采纳率: 16.7%
浏览 5
已结题

Django DRF 如何反序列化得到Python对象类型数据

img


这个创造和更新方法需要对象类型数据

img

但是这里校验后的数据都是字典类型的,请问该如何使用序列化器将字典中的外键类型,转变成Python对象类型的数据

  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-09-20 17:28
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在DJANGO中,你可以使用@SERIALIZERS.MODELSERIALIZER来序列化和反序列化对象类型数据。这允许你从序列化后得到的PYTHON对象中访问其属性。

    首先,你需要确保你的序列化器能够正确处理你的数据结构(例如,如果你有一个包含多个字段的对象,你应该将其转换为一个字典)。然后,你可以通过GET()函数或GET_OR_CREATE()函数获取对象的属性值,或者通过VALUES()函数获取对象的所有属性值。

    以下是一个简单的示例:

    FROM DJANGO.DB IMPORT MODELS
    
    CLASS MYMODEL(MODELS.MODEL):
        MY_FIELD = MODELS.CHARFIELD(MAX_LENGTH=100)
    
    # 创建模型实例
    MY_INSTANCE = MYMODEL()
    PRINT(MY_INSTANCE.MY_FIELD)  # 输出:MY_FIELD
    
    # 使用序列化器
    SERIALIZER = SERIALIZERCLASS()
    DATA = SERIALIZER.DUMPS({'MY_FIELD': 'VALUE'})
    PRINT(DATA)  # 输出:{"MY_FIELD": "VALUE"}
    
    # 使用序列化器并获取数据
    DATA = SERIALIZER.LOADS(DATA)
    PRINT(DATA['MY_FIELD'])  # 输出:VALUE
    

    在这个例子中,我们创建了一个名为SERIALIZERCLASS的序列化器,它接受一个字典作为输入参数,并返回一个字典作为输出。然后,我们使用SERIALIZE()函数来序列化我们的数据。

    注意,SERIALIZERCLASS应该实现__POST_INIT__方法来处理序列化的任何更改。在MYMODEL类中,我们可以这样做:

    CLASS MYMODEL(MODELS.MODEL):
        MY_FIELD = MODELS.CHARFIELD(MAX_LENGTH=100, DEFAULT='DEFAULT_VALUE')
    
        DEF __INIT__(SELF, *ARGS, **KWARGS):
            SUPER(MYMODEL, SELF).__INIT__(*ARGS, **KWARGS)
            IF NOT HASATTR(SELF, 'MY_FIELD'):
                SELF.MY_FIELD = NONE
    
        @CLASSMETHOD
        DEF FROM_DICT(CLS, DATA):
            OBJ = CLS.OBJECTS.GET(ID=DATA['ID'])
            RETURN OBJ
    
        @CLASSMETHOD
        DEF GET_OR_CREATE(CLS, ID=NONE, DEFAULTS=NONE):
            INSTANCE = CLS.OBJECTS.GET_OR_CREATE(ID=ID, DEFAULTS=DEFAULTS)
            RETURN INSTANCE[0]
    

    这样,当我们将MYMODEL实例添加到数据库时,它会自动将默认值设置为其ID。如果未提供默认值,则会根据传入的ID查询对象。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日
  • 赞助了问题酬金15元 9月20日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路