2016-05-12 7 views
2

Ich habe ein Modell, wo ich ID als CharField und Primärschlüssel überschrieben habe. Hier ist das Modell und seine Serializer:Django REST-Framework: wie ID-Feld bei POST erforderlich machen, d. H. Nicht schreibgeschützt Feld?

class Tool(models.Model): 
    id = models.CharField(max_length=10000, primary_key=True, default=uuid.uuid4, editable=False) 
    description = models.TextField(null=True, blank=True) 
    ... 

class ToolSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Tool 
     fields = (
      'id', 
      'description', 
      ... 
     ) 

standardmäßig Django REST-Framework markiert id Feld als schreibgeschützt und erfordert nicht es auf POST-Anfragen. Aber ich möchte, dass es beschreibbar ist und es beim POST erfordert. Wie erreiche ich das?

+0

nur eine Kuriosität, warum würden Sie das brauchen? –

Antwort

3

Ich glaube, ich fand die Antwort in einem unerwarteten Ort der DRF Dokumentation:

http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update

Ich brauche ein explizites id Feld in Serializer wie diese zu erstellen:

class ToolSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.CharField() 

    class Meta: 
     model = Tool 
     fields = (
      'id', 
      'description', 
      ... 
     ) 

Dieser Wille Überschreiben Sie das Standard-ID-Feld, das als schreibgeschütztes Feld erstellt wurde.

+0

funktioniert es? aktualisiert es wirklich ein PK-Feld in der Datenbank? –

+0

Ja, es funktioniert sicherlich für GET, POST und DELETE Anfragen und ich debugge derzeit PUT. Ich habe mich dafür entschieden, weil keine Werkzeugnamen einzigartig sind und ich ihre Namen jedem zeigen kann (benutze Werkzeugnamen in URLs). Warum also nicht die Namen als primäre IDs verwenden? In diesem Fall müssen Sie nach dem POST die 'ID' für ein Werkzeug angeben, also musste ich das Feld 'ID' nicht schreibgeschützt machen. –

+1

@ KarinaKlinkevičiūtė ist gerade auf einen anderen Grund gestoßen, beschreibbares 'id'-Feld zu erstellen: Update auf ListSerializern implementieren: http://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update –

Verwandte Themen