gpt4 book ai didi

django - 如果值为空,则自定义 Django Rest Framework Serializer 字段未运行 `to_representation()`

转载 作者:行者123 更新时间:2023-12-04 14:21:27 29 4
gpt4 key购买 nike

我想要一个自定义(只读)序列化器字段,如果它是 None,它会替换序列化值。 .我以为我可以覆盖 to_representation() ,但这似乎没有运行。这是一些代码:

模型.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()在空字段上运行?

最佳答案

据我了解 implementation , 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

关于django - 如果值为空,则自定义 Django Rest Framework Serializer 字段未运行 `to_representation()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257477/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com