python django实战开发序列化器的一个应用心得分享

需求:

查询的时候返回不包括SharePasswd 字段, 但是新增操作需要用到该字段

再不写多个model模型和序列化器的前提下实现

如果您在查询(GET 请求)时不希望返回 SharePasswd 字段,但在新增(POST 请求)时需要用到该字段,那么您可以在序列化器中处理这种差异。

首先,确保您的序列化器在新增操作中处理 SharePasswd 字段,您可以保留它在 fields 列表中。然后,对于查询操作,您可以重写序列化器的 to_representation 方法,在序列化模型实例为字典时排除 SharePasswd 字段。

废话不多说, 直接上干货代码:

序列化器中关键代码如下:

复制代码
from rest_framework import serializers
from exfile.sharefilesync.share_file_strategy_models import ShareFilePolicy


class ShareFileSerializer(serializers.ModelSerializer):
    """共享型文件同步 策略管理 """

    class Meta:  # 查询不返回SharePasswd, 但是新增又需要该列
        model = ShareFilePolicy
        fields = ('PolicyID', 'PolicyName', 'PolicySwich', 'PolicyLock', 'SyncMode', 'SynCFLOW', 'Protocol', 'SharePort',
                  'ShareHostIP', 'ShareName', 'ShareUser', 'SharePasswd', 'Priority', 'MountStatus')

    def to_representation(self, instance):
        # 调用父类的to_representation方法获取整个实例的序列化表示
        ret = super().to_representation(instance)
        # 检查请求的方法,如果是GET请求,则移除SharePasswd字段
        if self.context['request'].method == 'GET':
            ret.pop('SharePasswd', None)
        return ret

model模型中关键代码:

以上需求可以实现在查询get请求时, 查询结果返回列布包扣sharePasswd字段, 通过postman调用显示如下:

下面通过postman执行新增操作

然后通过去数据库查看结果如下:

可以看到新增的时候SharePasswd又是能成功插入到数据库中的, 至此最上面的需求完美实现, 今天就先写到这, 后续更多实战开发技巧心得陆续更新, 谢谢您的关注!!1

相关推荐
肖永威1 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ1 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha1 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
abluckyboy1 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
喵手2 小时前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
掘金者阿豪2 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
天天爱吃肉82182 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
ServBay3 小时前
一个下午,一台电脑,终结你 90% 的 Symfony 重复劳动
后端·php·symfony
sino爱学习3 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端