繁体   English   中英

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

[英]Django rest framework create-only serializer field

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

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

我希望有类似于serializers.ReadOnlyField东西,所以我可以有类似的东西:

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

但在文档或谷歌中找不到它。

只是为了扩展 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

@fabio.sussetto 的回答让我走上了正轨。 我觉得我的回答稍微漂亮一些; 我没有直接在类上指定序列化程序,而只在get_serializer_class() 此外,我不会根据 HTTP 类型(即POST )切换它,而是根据操作update ,我认为它更具声明性。

class RequestViewSet(viewsets.ModelViewSet): 
    model = Request 

    def get_serializer_class(self): 
        if self.action == 'update': 
            return serializer_class = SerializerWithoutCertainFields 
        return RequestModelSerializer

另一种解决方案可能是CreateOnlyDefault ( https://www.django-rest-framework.org/api-guide/validators/#createonlydefault )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM