DRF框架----关于序列化器的字段

继承BookInfoSerializer简化生成字段

序列化器根据模型类自动生成字段


模型类代码

class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=20, verbose_name='名称')
    pub_date = models.DateField(verbose_name='发布日期', null=True)
    readcount = models.IntegerField(default=0, verbose_name='阅读量')
    commentcount = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    image = models.ImageField(upload_to='book', null=True, verbose_name='图片')

    class Meta:
        db_table = 'bookinfo'  # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name

必须指定哪个模型类

model = 模型类


生成模型类的所有字段

fields = "__all__"

class BookInfoSerializer(serializers.ModelSerializer):
    # 继承ModelSerializer 默认实现create() 和update()
    class Meta:
        # 继承ModelSerializer 必须指定序列化器根据哪个模型类生成
        model = BookInfo
        # 生成所有字段
        fields = '__all__'

在这里插入图片描述


指定生成哪些字段

fields = ['字段名1','字段名2']

class BookInfoSerializer(serializers.ModelSerializer):
    # 继承ModelSerializer 默认实现create() 和update()
    class Meta:
        # 继承ModelSerializer 必须指定序列化器根据哪个模型类生成
        model = BookInfo
        # 指定生成哪些字段
        fields = ['id', 'name']

在这里插入图片描述


指定字段,除了这些字段生成其他所有

exclude = ['字段1','字段2']

class BookInfoSerializer(serializers.ModelSerializer):
    # 继承ModelSerializer 默认实现create() 和update()
    class Meta:
        # 继承ModelSerializer 必须指定序列化器根据哪个模型类生成
        model = BookInfo
        # 指定这些字段,除了这些字段其他全部生成
        exclude = ['id','name']

在这里插入图片描述


注意:

exclude和fields只能二选一,在一起会发生冲突


设置一些字段为只读,不可修改

read_only_fields = ('字段1','字段2')

等于一个元组

class BookInfoSerializer(serializers.ModelSerializer):
    # 继承ModelSerializer 默认实现create() 和update()
    class Meta:
        # 继承ModelSerializer 必须指定序列化器根据哪个模型类生成
        model = BookInfo
        fields = '__all__'
        read_only_fields = ('readcount', 'commentcount')

在这里插入图片描述


添加模型类之外的额外参数

extra_kwargs = {
	'字段1':{
		'额外参数1':值1,
		'额外参数2':值2
		}
}
class BookInfoSerializer(serializers.ModelSerializer):
    # 继承ModelSerializer 默认实现create() 和update()
    class Meta:
        # 继承ModelSerializer 必须指定序列化器根据哪个模型类生成
        model = BookInfo
        fields = '__all__'
        # 设置某些字段只读不可编辑
        read_only_fields = ('readcount', 'commentcount')
        # 添加额外参数
        extra_kwargs = {
            'name': {
                'max_length': 100,
                'min_length': 10,
            }
        }

在这里插入图片描述


测试

在这里插入图片描述

查询信息时查询出密码问题

在这里插入图片描述

设置密码字段为write_only=True

class PeopleInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = PeopleInfo
        fields = '__all__'

        extra_kwargs = {
            'password': {
                'write_only': True
            }
        }

密码不再显示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值