继承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
}
}
密码不再显示