Django REST Framework: как заменить ноль пустой строкой? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть модель с типом изображения ниже:

class Attendance(models.Model):
    face_image = models.ImageField(, blank=True, null=True, storage=MediaStorage())

Сериализатор, основанный на модели

class AttendanceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Attendance
        fields = ('id','face_image')

Однако, если поле изображения равно нулю, оно выглядит следующим образом

Its now showing like this in the json

  {
    "id": 1,
    "face_image": null
  }

Он покажет выход для face_image (ImageField) как ноль, если он равен None. То, что я хотел бы, чтобы заменить пустое значение пустой строки, как это ""

Ответы [ 2 ]

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

Переопределить метод to_representation() для AttendanceSerializer as,

class AttendanceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Attendance
        fields = ('id', 'face_image')

    <b>def to_representation(self, instance):
        data = super().to_representation(instance)
        if not data['face_image']:
            data['face_image'] = ""
        return data</b>

ОБНОВЛЕНИЕ (11/03/2019)

У меня много полей, и не очень хорошая идея, что я повторяю этот код для всех них, разве нет лучшего способа сделать это для всех полей?

class AttendanceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Attendance
        fields = ('id', 'face_image')

    def to_representation(self, instance):
        <b>my_fields = {'field_1', 'field_2', 'field_3', 'field_4', 'field_5'}</b>
        data = super().to_representation(instance)
        <b>for field in my_fields:
            try:
                if not data[field]:
                    data[field] = ""
            except KeyError:
                pass</b>
        return data
0 голосов
/ 04 сентября 2018

Вы можете использовать SerializerMethodField.

class AttendanceSerializer(serializers.ModelSerializer):

    face_image = serializers.SerializerMethodField()

    class Meta: 
        model = Attendance
        fields = ('id', 'face_image')

    def get_face_image(self, instance):
        return (instance.face_image.url if instance.face_image else '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...