tru*_*one 6 django serialization django-rest-framework
我想要一个自定义(只读)序列化器字段来替换序列化值(如果是)None。我以为我可以覆盖to_representation(),但这似乎没有运行。这是一些代码:
模型.py:
class Book(models.Model):
title = models.CharField(max_length=255)
rating = models.IntegerField(null=True)
Run Code Online (Sandbox Code Playgroud)
序列化器:
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)
Run Code Online (Sandbox Code Playgroud)
如果我然后执行以下操作:
hamlet = Book(title="Hamlet")
BookSerializer(instance=hamlet).data
Run Code Online (Sandbox Code Playgroud)
我得到以下回复:
{'title': 'Hamlet', 'rating', None}
Run Code Online (Sandbox Code Playgroud)
请注意评级是如何的,None而不是“这本书很糟糕”。
关于如何强制to_representation()在空字段上运行的任何想法?
据我从实现中了解到,to_representation如果值为None ,则不会调用方法。所以为了避免这个问题,我认为你可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |