模型类
class GoodsInfo(models.Model):
name = models.CharField(max_length=20)
pub_date = models.DateField(verbose_name='发布时间', null=True)
read_count = models.IntegerField(default=0, verbose_name='访问量')
is_delete = models.BooleanField(default=False, verbose_name='删除,默认不删除')
class Meta:
db_table = 'goods'
verbose_name_plural = '商品信息'
序列化程序
class GoodsInfoSerial(serializers.Serializer):
id = serializers.IntegerField(label='主键ID', read_only=True)
name = serializers.CharField(label='名称', max_length=20)
pub_date = serializers.DateField(label='发布时间', required=False)
read_count = serializers.IntegerField(label='访问量', required=False)
# 现场级验证:通过向子类添加.validate_<field_name>方法来指定自定义字段级验证Serializer
# def validate_name(self, value):
# if len(value) < 6:
# raise serializers.ValidationError('名称长度必须大于6')
# return value
# 对象级验证:要执行需要访问多个字段的任何其他验证,
# 请添加一个调用.validate()到Serializer子类的方法。
# 此方法采用单个参数,该参数是字段值的字典。
def validate(self, attrs):
name = attrs['name']
print('名称', name)
if len(name) < 6:
raise serializers.ValidationError('名称长度必须大于5')
return attrs
# 重写create方法
def create(self, validated_data):
obj = GoodsInfo.objects.create(**validated_data)
return obj
# 重写update方法
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.pub_date = validated_data.get('pub_date', instance.pub_date)
instance.read_count = validated_data.get('read_count', instance.read_count)
instance.is_delete = validated_data.get('is_delete', instance.is_delete)
instance.save()
return instance
使用python manage.py shell命令进入shell进行验证
from goods.serializers import GoodsInfoSerial
data = {'name': '1234'}
#序列化对象
ser1 = GoodsInfoSerial(data=data)
#验证
ser1.is_valid()
#验证没有错则保存
ser1.save()
验证失败
验证成功
django rest framework官方文档链接:
https://www.django-rest-framework.org/