【问题标题】:Create UUID on client and save primary key with Django REST Framework and using a POST在客户端上创建 UUID 并使用 Django REST 框架和使用 POST 保存主键
【发布时间】:2015-10-19 15:57:45
【问题描述】:

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

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

但是,当我从模型进行测试时,使用普通的 Django ORM 创建对象并预先设置 UUID,模型接受 UUID,因为它是 Primary Key,并且不会尝试重新创建一个新的。

这可能吗?

我的堆栈是

  • Django 1.8

  • Django Rest 框架 3.1

这是代码。

serializers.py:

class PersonCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('id', 'username', 'email', 'password')

models.py:

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):

【问题讨论】:

标签: python django rest django-rest-framework


【解决方案1】:

由于editable=False 参数,序列化程序的id 字段设置为read-only

设置了 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')

【讨论】:

  • 谢谢马克。像魅力一样工作!
  • 第二。另请注意,您可以在显式声明时删除read_only=False,因为read_only 关键字参数默认为False
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2018-05-21
  • 2020-05-15
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多