20 Мая


2017

DRF serializer. Вывод ненулевых полей.

Изначально при выводе полей через сериалайзер, поля у которых установлены значения null, выводят нулевые данные, лично меня такое положение дел в корне не устраивало, т.к. отправляемый json объект я отправляю на клиент и собираю из него выводимые данные, знать о нулевых данных мне ни к чему. Окей, так это выгядит сейчас:

"data": {
    "id": 20,
    "first_name": "Yar",
    "last_name": "asd",
    "patronymic": "asd",
    "passport_serial": "1234",
    "passport_number": "123456",
    "passport_date": null,
    "birth_place": null,
    "birth_day": null
}

Вывод который нужен мне:

"data": {
                "id": 20,
                "first_name": "Yar",
                "last_name": "asd",
                "patronymic": "asd",
                "passport_serial": "1234",
                "passport_number": "123456"
            }

Для нужного эффекта нужно переопределить метод to_representation:

class PersonalDataSerializer(serializers.HyperlinkedModelSerializer):
    def to_representation(self, instance):
        result = super(PersonalDataSerializer, self).to_representation(instance)
        return OrderedDict([(key, result[key]) for key in result if result[key] is not None])
DRF