【发布时间】:2019-01-18 16:00:22
【问题描述】:
我想要一个自定义(只读)序列化器字段,如果它是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() 在空字段上运行吗?
【问题讨论】:
-
您能否在覆盖的 to_representation 中首先以
super().to_representation()的身份进行 super_call。 -
@Shakil - 谢谢。这没有任何效果(
ReadOnlyField.to_representation()只是返回“值”)。 -
可能听起来很愚蠢,你能不能试试 value == None 而不是 value is None。
-
@Shakil - 同样,这没有效果。
标签: django serialization django-rest-framework