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
。