Custom is_valid() Serializer Django
I need to write custom check if data in body of a request is_valid() Below is my serializer class
class UserSerializer(serializers.ModelSerializer):
uid = serializers.IntegerField()
user_id = serializers.IntegerField()
u_name = serializers.CharField(max_length=50)
age = serializers.CharField(max_length=100)
email = serializers.CharField(max_length=100)
preferredtime = serializers.DateTimeField()
car = TableEvs()
pref_pay_mode = serializers.CharField(max_length=100)
Next I need to check if json body in post request has matching data as defined in TableEvs Class :
class TableEvs(models.Model):
# uid = models.BigIntegerField()
ev_uid = models.IntegerField()
company = models.CharField(max_length=100)
model = models.CharField(max_length=100)
can someone confirm if its possible ?
Yes, it's possible to validate the data in the body of a request using Django Rest Framework's serializers. You can override the validate(self, data)
method in UserSerializer to do this.
Source of the official documentation.
You can use the UserSerializer to validate the data in the request body and check if it matches the fields defined in the TableEvs model. If the validation fails, the serializer will raise an error and return a response with the error message. You can write a custom validation method in the UserSerializer to validate the values of the fields against the TableEvs model if necessary.
Here's an example of how you can use Django Rest Framework's serializers to validate the data in the request body:
class UserSerializer(serializers.ModelSerializer):
user_id = serializers.IntegerField()
u_name = serializers.CharField(max_length=50)
age = serializers.CharField(max_length=100)
email = serializers.CharField(max_length=100)
preferredtime = serializers.DateTimeField()
car = TableEvs() # another table
pref_pay_mode = serializers.CharField(max_length=100)
def validate(self, data):
ev_uid = data.get('car').get('ev_uid')
company = data.get('car').get('company')
model = data.get('car').get('model')
try:
ev = TableEvs.objects.get(ev_uid=ev_uid, company=company, model=model)
except TableEvs.DoesNotExist:
raise serializers.ValidationError({'error': 'Car data not found in TableEvs model'})
return data
class TableEvsSerializer(serializers.ModelSerializer):
class Meta:
model = TableEvs
fields = ('ev_uid', 'company', 'model')
In this example, the UserSerializer uses another serializer TableEvsSerializer to validate the car field. The validate method in the UserSerializer performs a custom validation by checking if the values of ev_uid, company, and model exist in the TableEvs model. If the validation fails, it raises a serializers.ValidationError with an error message.