Django rest framework - сериализатор модели не сериализует все поля - PullRequest
1 голос
/ 11 июня 2019

Я использую Django rest Framework 3.7.7

Я хочу сериализовать экземпляр объекта и затем десериализовать его (без повторного сохранения в БД).Поэтому я создал сериализатор, который наследуется от serializers.ModelSerializer.К этому экземпляру модели я иногда добавляю поле в запросе, которое не является частью модели, используя свойство setter.Я также добавил его в сериализатор, но при сериализации - я не вижу это поле в сериализованных данных.

Это модель:

class MyModel(models.Model):

    manager = models.CharField(max_length=200)
    reviewer = models.CharField(max_length=200)

    @property
    def note(self):
        return getattr(self, '_note', None)

    @note.setter
    def note(self, value):
        self._note = value

Это модельсериализатор:

class MyModelSerializer(serializers.ModelSerializer):
    note = serializers.CharField(write_only=True, required=False, max_length=1000, allow_null=True)

    class Meta:
        model = MyModel
        fields = [
            'manager',
            'reviewer',
            'note'
        ]

Вот как я использую сериализатор:

ser_instance = MyModelSerializer(self.instance)
ser_data = ser_instance.data

похоже, что ser_instance.data содержит только данные полей модели (без 'примечания')

1 Ответ

1 голос
/ 11 июня 2019

Из write_only - [DRF-Doc] говорится, что

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

По умолчанию False


Итак, если вам нужно сериализовать поле note, удалите write_only=true из сериализатора.

#serializers.py
class MyModelSerializer(serializers.ModelSerializer):
    <b>note = serializers.CharField(required=False, max_length=1000, allow_null=True)  # removed "write_only=True"</b>
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...