根据序列化器中的条件返回值

时间:2018-11-19 17:16:45

标签: django django-rest-framework

我的应用程序中有一个Entry模型,当删除它时,我只是标记为已删除,而不是软删除(因此原始内容保留在数据库中)。我想在我的序列化器类中实现一个逻辑,如果一个条目被标记为已删除(布尔字段),则字段“内容”将返回值“已删除”,而不是原始内容。我已经实现了逻辑,如果删除则无法更改。

我尝试将CharField与source参数一起使用,但是它必须是只读的,因此将无法正常工作,因为我仍然希望内容是可写的。

1 个答案:

答案 0 :(得分:0)

您可以为此使用SerializerMethodField:-

https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

class EntrySerializer(serializers.ModelSerializer):
    content = serializers.SerializerMethodField()

    class Meta:
        model = Entry

    def get_content(self, obj):
        if obj.deleted:
            return "Deleted"
        return obj.content