ModelSerializer的功能

model表


class User(models.Model)
    """定义一个测试表User"""
    username = models.CharField(max_length=30, verbose_name='用户名')
    password = models.CharField(max_length=20, verbose_name='密码')
    password2 = models.CharField(max_length=20, verbose_name='确认密码')
    class Meta:
        db_table = 'User'

 定义序列化器


class TestUserSerializer(serializers.ModelSerializer)
    """测试ModelSerializer的功能"""
    # 有些字段也需要序列化, 但是这些字段不在参照模型中
    # 在这里添加额外需要序列化的字段, 即不在指定参照模型中的字段, 
    # 再直白点, 就是不在表User内的字段
    mobile = serializers.CharFileld(label='手机号', min_length=11, max_length=11)  
    
    class Meta:
        # 指明参照模型
        model = User
        # 指明字段, 即要序列化的字段
        fields = '__all__'  # 所有表User中字段
        fields = ['username', 'password', 'mobile'] # 指定字段 新添加的也可以指定
        exclude = ['password2']  # 排除掉的字段  不能和fields一起用
        read_only_fields = ('username', 'password')  # 标明只读字段 
        
        # 添加或修改原有字段的选项残数据
        extra_kwargs = {
            'username': {
                'min_length': 5,
                'max_length': 20,
                'error_messages': {
                    'min_length': '仅允许5-20个字段的用户',
                    'max_length': '仅允许5-20个字段的用户',
                }
            },
            'password': {
                'write_only': True,
                'min_length': 8,
                'max_length': 20,
                'error_messages': {
                    'min_length': '仅允许8-20个字段的密码',
                    'max_length': '仅允许8-20个字段的密码',
                }
            }
        }
"""
灵活使用模型类和模型类序列化
可以添加字段(直接添加)
减少字段(fields)
修改字段(extra_kwargs)
"""

 

原文地址:https://www.cnblogs.com/pythonqwertytre/p/13746720.html