Django Rest Framework 创建后未返回所有字段

2 投票
1 回答
1510 浏览
提问于 2025-05-01 14:36

总结:我正在使用Django Rest框架来创建一个简单的对象(如下所示)。在序列化器中,我只取了必要的字段。但是,在POST响应中,我没有收到所有字段(比如id、creation_date等)。我只收到了那些不是只读的字段。请帮忙:

模型

class Document(models.Model):
    owner = models.IntegerField(null=False)
    description = models.CharField(max_length=512, blank=True)
    created_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)
    expiry_time = models.DateTimeField(blank=True, null=True)
    status = models.CharField(max_length=128, blank=True)
    size = models.IntegerField(blank=True)
    type = models.IntegerField(max_length=128, blank=True)

序列化器

class DocumentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Document
        fields = ('expiry_time', 'description', 'size', 'type', 'status')
        read_only_fields = ('id', 'owner', 'created_time', 'update_time')

视图

class DocumentViewSet(viewsets.ModelViewSet):
...
...

def get_serializer_class(self):
    if self.request.method == 'POST':
        serializer_class = DocumentCreateSerializer
    elif self.request.method == 'GET':
        serializer_class = DocumentGetSerializer
    elif self.request.method == 'PUT':
        serializer_class = DocumentUpdateSerializer
    elif self.request.method == 'PATCH':
        serializer_class = DocumentUpdateSerializer
    return serializer_class
暂无标签

1 个回答

3

如果你想要返回那些字段,那么你应该把它们包含在 fields 中:

class DocumentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Document
        fields = ('id', 'owner', 'created_time', 'update_time', 'expiry_time',
                  'description', 'size', 'type', 'status')
        read_only_fields = ('id', 'owner', 'created_time', 'update_time')

撰写回答