Пользовательский сериализатор 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 с сообщением об ошибке.

Вернуться на верх