django-rest-framework:serializer.save没有返回对象的id

时间:2014-04-08 06:25:24

标签: django django-rest-framework

简短说明:我遇到了ModelSerializer的问题。保存时不填充对象的id字段。

有用的细节。 我的模特:

class Platform(models.Model):
    identifier = models.CharField(max_length=32, unique=True)
    description = models.TextField()

我的序列化器:

class PlatformSerializer(serializers.ModelSerializer):
    identifier = serializers.CharField(required=True, max_length=32)
    description = serializers.CharField(max_length=100000, required=False)

    class Meta:
        model=Platform
        fields=('id', 'identifier', 'description',)
        read_only_fields=('id',)

和APIView:

class PlatformView(APIView):
    def post(self, request, id_platform=None, format=None):
        serializer = PlatformSerializer(data=request.DATA)
        if serializer.is_valid():            
            serializer.save()            
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(form_error(u"Ошибка при создании КА: ", serializer.errors), status=status.HTTP_400_BAD_REQUEST)

line serializer.save()返回具有id == None的Platform对象。这是一个错误还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

我认为这个序列化程序类应该可以工作:

class PlatformSerializer(serializers.ModelSerializer):
    class Meta:
        model=Platform

ModelSerializer

  

默认情况下,类中的所有模型字段都将映射到相应的序列化器字段。

答案 1 :(得分:1)

哎哟。我很抱歉这个问题。 有人为此表创建了pk字段作为整数,默认值来自序列(不拥有此序列)。 Django执行pk选择为SELECT CURRVAL(pg_get_serial_sequence('tablename','id'))。但是pg_get_serial_sequence returns Null. I don't know why django-rest-framework doesn't perform选择...返回id;`。我将尝试修复数据库。