Создайте UUID на клиенте и сохраните первичный ключ с помощью Django REST Framework и используйте POST

Я хотел бы иметь возможность создать UUID на клиенте и отправить его в Django Rest Framework (DRF) и использовать его для Primary Key Модели.

До сих пор, когда я отправлял Primary Key, который помечен как id в моем исходном коде, DRF игнорирует id и использует аргумент по умолчанию Модели для создания нового UUID.

Однако, когда я тестирую модель, используя обычный Django ORM для создания объекта и предварительно устанавливая UUID, модель принимает UUID как Primary Key и не пытается и не воссоздает новый.

Возможно ли это?

Мой стек

  • Django 1.8

  • Django Rest Framework 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):

Ответ 1

Поле id сериализатора устанавливается как read-only из-за аргумента editable=False.

Поля модели, которые имеют editable = False set и поля 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')