2017-10-18 1 views
0

Ich benutze Liste Serializer von vielen = True. Die create-Methode läuft einwandfrei, aber ich kann den Ablauf der benutzerdefinierten Update-Methode des Listen-Serialisierers in der Dokumentation des django rest framework nicht verstehen. Die Verwendung der Basis des Listen-Serialisierers ist klar, aber wenn ich es in Code verwende, ist der Ablauf nicht verständlich. Ich verstehe nicht, welches Buch in der vierten Zeile heißt. Was ist Buch? In der Dokumentation wird auch gefragt, ob dem Instanz-Serializer ein explizites ID-Feld hinzugefügt werden soll. Das standardmäßig implizit generierte ID-Feld ist als read_only gekennzeichnet. Suchen, um zu verstehen, was Dokumentation sagt und wie man es implementiert. Der Kontext aus der Dokumentation ist unten angegeben.Nicht in der Lage, den Ablauf der Liste Serializer-Update in Django Rest Framework zu verstehen

class BookListSerializer(serializers.ListSerializer): 
def update(self, instance, validated_data): 
    # Maps for id->instance and id->data item. 
    book_mapping = {book.id: book for book in instance} 
    data_mapping = {item['id']: item for item in validated_data} 

    # Perform creations and updates. 
    ret = [] 
    for book_id, data in data_mapping.items(): 
     book = book_mapping.get(book_id, None) 
     if book is None: 
      ret.append(self.child.create(data)) 
     else: 
      ret.append(self.child.update(book, data)) 

    # Perform deletions. 
    for book_id, book in book_mapping.items(): 
     if book_id not in data_mapping:a 
      book.delete() 

    return ret 

Antwort

0

instance ist eine Liste der Bücher, das heißt Objekte der Klasse, die serialisiert werden soll. validated_data ist eine Liste von Datenwörterbüchern, wobei jedes item ähnlich ist, was die validated_data Sie erhalten, wenn Sie einen Nichtlisten-Serializer verwenden. Um auf die ID eines Buchobjekts zuzugreifen, verwenden Sie book.id, um auf die ID der Elemente in validated_data zuzugreifen, verwenden Sie Element ['id']. Sie benötigen ein nicht read_only-ID-Feld, wenn Sie eine Liste von Objekten einfügen und eine ganze Sammlung ersetzen möchten, müssen Sie IDs übergeben, um zu definieren, ob ein Element ein vorhandenes Element aktualisieren soll. welcher, oder wenn ein Gegenstand neu ist. Das passiert in den Schleifen: In der ersten werden Elemente entweder erstellt oder aktualisiert, abhängig davon, ob Objekte mit derselben ID existieren oder nicht. In der letzten Schleife werden alle Elemente gelöscht, die nicht in validated_data erscheinen.

Verwandte Themen