Python Django rest框架仅创建序列化程序字段

Python Django rest框架仅创建序列化程序字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个Django模型作为请求描述。创建它是为了由REST客户端发出请求,用于记录任务的当前状态,并记录客户端接收到的历史请求 该模型有几个字段,用于微调和控制请求的任务(例如,目标对象和操作类型)。显然,我希望客户端在创建对象时控制这些字段,但在创建之后不控制(一旦任务开始运行,就不能更改对象) 我希望有类似于序列化程序的东西。ReadOnlyField,所以我可以有类似的东西: class TaskSerializer(serializers.ModelSerializer): o

我有一个Django模型作为请求描述。创建它是为了由REST客户端发出请求,用于记录任务的当前状态,并记录客户端接收到的历史请求

该模型有几个字段,用于微调和控制请求的任务(例如,目标对象和操作类型)。显然,我希望客户端在创建对象时控制这些字段,但在创建之后不控制(一旦任务开始运行,就不能更改对象)

我希望有类似于
序列化程序的东西。ReadOnlyField
,所以我可以有类似的东西:

class TaskSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    task_id = serializers.ReadOnlyField()
    target_object = serializers.CreateOnlyField()

但是在文档或google中找不到它。

仅扩展Wim的答案,这是一种根据传入请求方法选择不同序列化服务器的方法:

class RequestViewSet(viewsets.ModelViewSet): 
    serializer_class = RequestModelSerializer 
    model = Request 

    def get_serializer_class(self): 
        serializer_class = self.serializer_class 
        if self.request.method == 'POST': 
            serializer_class = SerializerWithoutCertainFields 
        return serializer_class

另一个解决方案可能是
CreateOnlyDefault
()。

的答案是@fabio.susset,让我走上正轨。我觉得我的答案稍微漂亮一点;我不直接在类上指定序列化程序,只在
get\u serializer\u class()
中指定。此外,我不会根据HTTP类型(即
POST
)切换它,而是根据操作
update
,我认为这更具声明性

class RequestViewSet(ViewSet.ModelViewSet):
模型=请求
def get_序列化程序_类(自身):
如果self.action==“更新”:
返回serializer\u class=SerializerWithoutCertainFields
返回RequestModelSerializer

CreateOnlyDefault
非常有用,但仅适用于对该视图/序列化程序的所有请求都相同的默认值。也就是说,它可以用于“创建日期”(虽然您也可以在模型上这样做)或“创建人”或一些静态值,但对于用户可以在创建时指定但之后不会更改的值来说,它没有用处。