2015-07-28 17 views
11

Mi piacerebbe essere in grado di creare un UUID sul client e inviarlo a Django Resto Framework (DRF) e l'uso che per la Primary Key del modello.Creare UUID sul client e salvare la chiave primaria con Django REST quadro e utilizzando un POST

Finora, quando invio la Primary Key, che viene etichettato id nel mio codice sorgente, DRF ignora il id e utilizza l'argomento di default del modello per generare una nuova UUID.

Tuttavia, quando prova dal modello, utilizzando il normale Django ORM per creare l'oggetto, e pre-impostare il UUID, il modello accetta l'UUID come è Primary Key e non cerca di ricreare una nuova.

È possibile?

mio stack è

  • Django 1.8

  • Django Resto Framework 3,1

Ecco il codice.

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

Ho un correlato domanda e commentata su github (per riferimento) https://github.com/tomchristie/django-rest-framework/issues/2432 –

risposta

7

La id campo del serializzatore è impostata come read-only perché dell'argomento editable=False.

campi modello che hanno modificabile = False set, e campi AutoField saranno essere impostate a sola lettura per impostazione predefinita,

Prova dichiarandolo esplicitamente:

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

Grazie Mark. Funziona come un fascino! –

+1

Secondato. Si noti inoltre che è possibile rilasciare 'read_only = False' quando lo si dichiara esplicitamente, poiché l'argomento della parola chiave' read_only' è 'False' per impostazione predefinita. –

Problemi correlati