Django Rest Framework如何写多字段的验证

662 阅读1分钟

单字段的验证,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