茄子焦糖 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 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?