Почему мои данные недействительны? (serializer.is_valid () возвращает False) - PullRequest
0 голосов
/ 09 февраля 2020

Сериализатор

class AddressSerializer(serializers.ModelSerializer):
    Address1 = serializers.CharField(source='address1')
    Address2 = serializers.CharField(source='address2')
    City = serializers.CharField(source='city')
    State = serializers.CharField(source='state')
    Zip = serializers.CharField(source='zipcode')
    class Meta:
        model = Address
        fields = ('Address1', 'Address2', 'City', 'State', 'Zip')

Модель

class Address(models.Model):
    address1 = models.CharField(max_length=50)
    address2 = models.CharField(max_length=50, null=True)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    zipcode = models.CharField(max_length=50)

Так в оболочке (manage.py) при запуске:

address = Address(address1='123 Sesame St', address2=None, city='Jurassic City', state='California', zipcode='90210')
address.save()
serializer = AddressSerializer(address)
content = JSONRenderer().render(serializer.data)
stream = io.BytesIO(content)
data = JSONParser().parse(stream)
serializer = AddressSerializer(data=data)
serializer.is_valid()

Почему сериализатор. is_valid () вернуть false? Возможно, что при получении данных адрес Address2 может быть нулевым.

edit: Кажется, проблема в address = None. Потому что когда я добавлю строку, она будет действительной.

Django Rest Framework

1 Ответ

0 голосов
/ 09 февраля 2020

если вы запустите serializer.errors, вы получите {'Address2': [ErrorDetail(string='This field may not be null.', code='null')]}

Проблема заключается в вашем сериализаторе, поскольку вы используете ModelSerializer, я просто переписал бы его так:

class AddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = ['address1', 'address2', 'city', 'state', 'zipcode']

Поля должны совпадать с полями в вашей модели

...