Python 在客户端上创建UUID,并使用Django REST框架和POST保存主键

Python 在客户端上创建UUID,并使用Django REST框架和POST保存主键,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,我希望能够在客户端上创建一个UUID,并将其发送给Django Rest Framework(DRF),并将其用于模型的主键 到目前为止,当我发送源代码中标记为id的主键时,DRF会忽略id,并使用模型的默认参数生成新的UUID 但是,当我从模型中测试时,使用普通的Django ORM创建对象,并预先设置UUID,模型接受UUID,因为它是主键,而不尝试重新创建一个新的 这可能吗 我的堆栈是 Django 1.8 Django Rest框架3.1 这是代码 序列化程序。py: class P

我希望能够在客户端上创建一个
UUID
,并将其发送给Django Rest Framework(DRF),并将其用于模型的
主键

到目前为止,当我发送源代码中标记为
id
主键时,DRF会忽略
id
,并使用模型的默认参数生成新的
UUID

但是,当我从模型中测试时,使用普通的Django ORM创建对象,并预先设置
UUID
,模型接受
UUID
,因为它是
主键,而不尝试重新创建一个新的

这可能吗

我的堆栈是

  • Django 1.8

  • Django Rest框架3.1

这是代码

序列化程序。py:

class PersonCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('id', 'username', 'email', 'password')
from django.contrib.auth.models import AbstractUser

class BaseModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class Person(AbstractUser, BaseModel):
型号。py:

class PersonCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('id', 'username', 'email', 'password')
from django.contrib.auth.models import AbstractUser

class BaseModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class Person(AbstractUser, BaseModel):

序列化程序的
id
字段设置为,因为
editable=False
参数

设置了editable=False的模型字段和AutoField字段 默认设置为只读

尝试显式声明它:

class PersonCreateSerializer(serializers.ModelSerializer):
    # Explicit declaration sets the field to be `read_only=False`
    id = serializers.UUIDField()

    class Meta:
        model = Person
        fields = ('id', 'username', 'email', 'password')

我有一个相关的问题,并评论了github(供参考)谢谢你,马克。工作起来很有魅力!附议。还请注意,在显式声明时,可以删除
read_only=False
,因为默认情况下
read_only
关键字参数为
False