单字段的验证,DRF里面可以写validate_field或者自定义的validator来搞定,但是多字段的验证,就需要覆盖validate方法。
validate方法里的data是个字典,可以拿到请求里的数据。如果需要拿到当前的instance,可以用self.instance 比如说我有一个api改变某个model的status,需要检查当前的status为某个status的时候才可以继续。
class SapTestSerializer(serializers.ModelSerializer):
class Meta:
model = MaterialBatch
fields = ["status"]
read_only_fields = ["status"]
def validate(self, data):
if self.instance.status != "tested":
raise serializers.ValidationError(
"Only batch with tested status can be set to sap_tested"
)
return data
def update(self, instance, validated_data):
instance.status = "sap_tested"
instance.save()
return instance