Я хотел бы, чтобы пользовательское поле сериализатора (только для чтения) заменяло сериализованное значение, если оно равно 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()
запускаться на пустых полях?