Пользовательское поле сериализатора Django Rest Framework не запускает `to_representation ()`, если значение равно нулю - PullRequest
0 голосов
/ 18 января 2019

Я хотел бы, чтобы пользовательское поле сериализатора (только для чтения) заменяло сериализованное значение, если оно равно None. Я предполагал, что могу просто перезаписать to_representation(), но это не похоже на работу. Вот некоторый код:

models.py:

class Book(models.Model):
  title = models.CharField(max_length=255)
  rating = models.IntegerField(null=True)

сериализаторов:

class ReplaceableSerializerField(serializers.ReadOnlyField):

  def to_representation(self, value):
    if value is None:
      return "this book sucks"
    return value

class BookSerializer(serializers.ModelSerializer):

  class Meta:
    model = Book
    fields = ("title", "rating",)

  rating = ReplaceableSerializerField(allow_null=True)

Если я тогда сделаю следующее:

hamlet = Book(title="Hamlet")
BookSerializer(instance=hamlet).data

Я получаю следующий ответ:

{'title': 'Hamlet', 'rating', None}

Обратите внимание, что рейтинг None вместо "эта книга отстой".

Есть идеи, как заставить to_representation() запускаться на пустых полях?

1 Ответ

0 голосов
/ 18 января 2019

Насколько я понимаю из реализации , метод to_representation не вызывается, если значение равно Нет . Поэтому, чтобы избежать этой проблемы, я думаю, вы можете использовать SerializerMethodField . Вы можете использовать это так:

class BookSerializer(serializers.ModelSerializer):
  rating = serailizer.SerializerMethodField()

  class Meta:
    model = Book
    fields = ("title", "rating",)

  def get_rating(self, obj):
      if obj.rating == None:
         return "Something"
      return obj.rating
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...