DRF Невозможно иметь обязательный флаг = False в сериализаторе вложенных моделей - PullRequest
0 голосов
/ 31 мая 2018

Я не могу отсортировать эту ошибку проверки.

В моей модели адреса есть обязательное поле 'locality'.

class Address(models.Model):
      ....
      locality = models.CharField(max_length=20,unique=True)
      ....

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ['house_number', 'street', 'area', 'locality', 'address_of']


class CustomerSerializer(serializers.ModelSerializer):
    ship_address = AddressSerializer(required=False)

    class Meta:
        model = Customer

В модели адреса расположение является обязательным полем.

Я хочу, чтобы AddressSerializer был необязательным в CustomerSerializer.Несмотря на наличие обязательного флага = False, я получаю ошибку проверки:

"ship_address": {
        "locality": [
            "This field may not be blank."
        ]
    }

** Пожалуйста, обратите внимание: это только репрезентативная копия, а не точная копия моих моделей и сериализаторов, поэтому игнорируем любые незначительныеошибки.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Тебе нужно немного акробатики.В вашем viewsets вы определяете полезную нагрузку и http-метод.И используйте разные Serializer классы обработки их.

0 голосов
/ 12 сентября 2018

У меня была та же проблема, что и у вас с вложенным сериализатором.В конце концов, я нашел решение, которое добавляло флаг read_only, и оно работает как шарм.Я надеюсь, что это решит вашу проблему.

class Meta:
    model = ModelName
    fields = ('pk', 'field_1', 'field_2', 'field_3')
    extra_kwargs = {
        'field_1': {
            'required': False,
            'read_only': True,
        },
    }
0 голосов
/ 01 июня 2018
class CustomerSerializer(serializers.ModelSerializer):
    ship_address = AddressSerializer(read_only=True)

и измените models.py null=True в поле, которое вы хотите сделать необязательным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...