В Django REST control сериализатор не удаляет автоматически пробелы? - PullRequest
0 голосов
/ 25 апреля 2018

model.py

class Msg(models.Model):
    content = models.CharField(max_length=1024, null=True)

serializer.py

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Msg
        fields = ["content"]

имеет данные:

{"content": "   space    test    "}

и

print(data)
serializer = MessageSerializer(data=data)
if serializer.is_valid():
    serializer.save()
    print(serializer.data)
    return True, serializer.data
else:
    return False, serializer.errors

сначалаprint {'content': ' space test '} second print {'content': 'space test'} Таким образом, пробелы в базе данных исчезли.
Как сохранить пробелы?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

С Документы DRF на CharField :

trim_whitespace - Если установлено значение True, то пробелы в начале и в конце обрезаются. По умолчанию установлено значение True.

Таким образом, вам нужно передать этот флаг в поле сериализатора самостоятельно и установить его на False:

class MessageSerializer(serializers.ModelSerializer):
    content = serializers.CharField(trim_whitespace=False, max_length=1024)
    class Meta:
        model = Msg
        fields = ["content"]

или лучше с помощью дополнительных аргументов ключевого слова :

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Msg
        fields = ["content"]
        extra_kwargs = {"content": {"trim_whitespace": False}}

Второй вариант лучше, потому что другие свойства все равно будут правильно выбраны из модели DRF.

0 голосов
/ 25 апреля 2018

Вы можете использовать опцию trim_whitespace , указанную в сериализаторах django-rest-framework.

class MessageSerializer(serializers.ModelSerializer):
    content = serializers.CharField(max_length=1024, trim_whitespace=True)

    class Meta:
        model = Msg
        fields = ["content"]
0 голосов
/ 25 апреля 2018

Вы можете настроить вывод этого поля, реализовав метод to_representation ()

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