1,list时:
1,创建ModelSerizler,
2,如果model字段要进行进一步运算或者处理,那么serializerMethod()进行进一步的处理。
2,create
1,创建serializer
2,如果是创建时,可以在字段内部进行字段信息的判断,并且写好错误信息
比如:serializers.CharField(max_length=200)
3,创建时,直接在serializer下面写create方法,如果有问题,也可以在内部直接raise错误
a,期间可以通过钩子函数处理每个字段信息
def validate_title(self, value):
if 'django' not in value.lower():
raise serializers.ValidationError("Blog post is not about Django")
return value
b,如果要处理全部的字段信息
def validate(self, data):
if data['start'] > data['finish']:
raise serializers.ValidationError("finish must occur after start")
return data
c,直接创建
def create(self, validated_data): profile_data = validated_data.pop('profile') user = User.objects.create(**validated_data) Profile.objects.create(user=user, **profile_data) return user
d,在list下,检测是否成功
serializer = CommentSerializer(comment, data=data)
serializer.is_valid() # True
serializer.validated_data # {'content': 'foo bar', 'email': '[email protected]', 'created': datetime.datetime(2012, 08, 22, 16, 20, 09, 822243)} comment = serializer.save()
comment = serializer.save()
e,如果你想在save中再加东西
serializer.save(owner=request.user)
f,如果你不想创建对象时,想发邮件,就重写save方法
def save(self):
email = self.validated_data['email']
message = self.validated_data['message']
send_email(from=email, message=message)
g,如果对一个字段限制信息单独定制,或者公用
def multiple_of_ten(value):
if value % 10 != 0:
raise serializers.ValidationError('Not a multiple of ten')
class GameRecord(serializers.Serializer):
score = IntegerField(validators=[multiple_of_ten])
h,嵌套序列化,当然嵌套查询,可以优化
class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
username = serializers.CharField(max_length=100)
class CommentSerializer(serializers.Serializer):
user = UserSerializer()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
如果嵌套的那个地方可能是空 要指定参数required
user = UserSerializer(required=False)
4,update和create差不多