2015-07-28 17 views
11

Tôi muốn có thể tạo một UUID trên máy khách và gửi đến Django Rest Framework (DRF) và sử dụng nó cho Primary Key của Mô hình.Tạo UUID trên máy khách và lưu khóa chính với khung REST Django và sử dụng POST

Cho đến nay, khi tôi gửi Primary Key, được dán nhãn id trong mã nguồn của tôi, DRF bỏ qua id và sử dụng đối số mặc định của mô hình để tạo ra một tươi UUID.

Tuy nhiên, khi tôi thử nghiệm từ mô hình, sử dụng bình thường Django ORM để tạo ra các đối tượng, và cài đặt trước các UUID, Model chấp nhận UUID vì nó là Primary Key và không cố gắng và tạo một hình mới.

Điều này có khả thi không?

chồng tôi là

  • Django 1,8

  • Django Nghỉ ngơi Khung 3,1

Đây là mã.

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

Tôi có một liên quan câu hỏi và nhận xét về github (để tham khảo) https://github.com/tomchristie/django-rest-framework/issues/2432 –

Trả lời

7

Trường id của serializer được thiết lập như read-only vì những tranh luận editable=False.

lĩnh vực mẫu mà có thể chỉnh sửa = bộ False, và các lĩnh vực AutoField sẽ được thiết lập để chỉ đọc theo mặc định,

Hãy thử tuyên bố nó một cách rõ ràng:

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') 
+0

Cảm ơn bạn Mark. Làm việc như một say mê! –

+1

Đã chọn. Cũng lưu ý rằng bạn có thể thả 'read_only = False' khi khai báo nó một cách rõ ràng, vì đối số từ khóa' read_only' là 'False' theo mặc định. –

Các vấn đề liên quan