Сообщения об ошибках DRF объединяют сообщения об ошибках модели и настраиваемого поля в ответ - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть эта модель в django:

      product_name = models.CharField(max_length=20, blank=False, required = True)
      code = models.CharField(max_length = 13, blank = False, required= True)
      product_note = models.CharField(max_length = 2000, blank = True, required=False)

Для кода, который применяется в сериализаторе, есть специальный валидатор и дезинфицирующее средство. Теперь моя проблема заключается в том, что если оба поля неверны (отсутствует имя продукта и неверный код), я получаю ответ: «это поле обязательно» для названия продукта и сообщение об ошибке кода никогда не отображается. Если имя_продукта передается в соответствии с определениями его модели, отображается сообщение об ошибке кода.

Есть ли способ, как определение модели (т. Е. Обязательное) и пользовательская проверка могут быть обработаны и возвращены сразу?

from products.models import Product
from rest_framework import serializers
from validations.product_validators import valid_product_code

class NewProductSerializer(serializers.ModelSerializer):

    def validate(self, data):
        # validate data here
        err_msg = {}

        code = valid_product_code(data['code'])

        if code == '':
            err_msg['code']=['The entered product do not follow product code rules and could not be sanitized']

        if err_msg:
            raise serializers.ValidationError(err_msg)

        data['code'] = code
        return data

    class Meta:
        model = Product
        fields = ('product_name', 'code','product_note')

1 Ответ

0 голосов
/ 14 апреля 2020

если поля кода не пустые, сериализатор вызывает метод validate_code ().

class NewProductSerializer(serializers.ModelSerializer):

    class Meta:
        model = Product
        fields = ('product_name', 'code','product_note')

    def validate_code(self, value):
        # validate data here
        err_msg = {}

        code = valid_product_code(value)

        if code == '':
            err_msg['code']=['The entered product do not follow product code rules and could not be sanitized']

        if err_msg:
            raise serializers.ValidationError(err_msg)

        return value
...