Пользовательский сериализатор is_valid() Django
Мне нужно написать пользовательскую проверку, если данные в теле запроса is_valid() Ниже приведен мой класс сериализатора
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)
Далее мне нужно проверить, имеет ли тело json в post-запросе соответствующие данные, определенные в классе TableEvs :
class TableEvs(models.Model):
# uid = models.BigIntegerField()
ev_uid = models.IntegerField()
company = models.CharField(max_length=100)
model = models.CharField(max_length=100)
может ли кто-нибудь подтвердить, возможно ли это?
Да, можно проверить данные в теле запроса с помощью сериализаторов Django Rest Framework. Для этого вы можете переопределить метод validate(self, data)
в UserSerializer.
Источник официальной документации.
Вы можете использовать UserSerializer для валидации данных в теле запроса и проверки их соответствия полям, определенным в модели TableEvs. Если проверка не прошла, сериализатор выдаст ошибку и вернет ответ с сообщением об ошибке. Вы можете написать собственный метод проверки в UserSerializer для проверки значений полей по модели TableEvs при необходимости.
Вот пример того, как вы можете использовать сериализаторы Django Rest Framework для проверки данных в теле запроса:
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')
В этом примере UserSerializer использует другой сериализатор TableEvsSerializer для валидации поля car. Метод validate в UserSerializer выполняет пользовательскую проверку, проверяя, существуют ли значения ev_uid, company и model в модели TableEvs. Если валидация не удается, возникает serializers.ValidationError с сообщением об ошибке.