简短说明:我遇到了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对象。这是一个错误还是我错过了什么?
答案 0 :(得分:1)
我认为这个序列化程序类应该可以工作:
class PlatformSerializer(serializers.ModelSerializer):
class Meta:
model=Platform
默认情况下,类中的所有模型字段都将映射到相应的序列化器字段。
答案 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;`。我将尝试修复数据库。