2017-01-25 7 views
0

Ich habe eine perform_create für ein Objekt, das ein anderes Objekt erstellt.So wird perfom_create erstellt, wenn das Objekt in der Verwaltungssite erstellt wird. Django RestFramework

class DocumentDetailSampleViewSet(viewsets.ModelViewSet): 
    queryset = DocumentDetailSample.objects.all() 
    serializer_class = DocumentDetailSampleSerializer 

    def perform_create(self, serializer): 
     doc_detail_sample = serializer.save() 
     query_set = User.objects.all() 
     ids = query_set.values_list('id', flat=True) 
     for i in ids: 
      doc_detail = DocumentDetail() 
      doc_detail.details_sample = doc_detail_sample 
      doc_detail.user_id_id = str(i) 
      doc_detail.save() 

Wie man sehen kann, wenn ich eine DocumentDetailSample ein DocumentDetail wird auch erstellt erstellen.

Es funktioniert gut, wenn ich einen "POST" mache.

Mein Problem ist, dass DocumentDetailSamples auch in der Admin-Site erstellt werden kann. Also ... Wenn es in der Admin-Site erstellt wird, funktioniert die perform_create nicht mehr und die DocumentDetail wird nicht erstellt.

Was könnte ich tun? Ich möchte die DocumentDetail auch gleich nach der "admin" DocumentDetailSample Erstellung erstellen.

Antwort

1

Signale sind ein nützliches Werkzeug für diesen Job (docs)

das post_save Signal Verwenden Sie jedes Mal eine Instanz eines Modells wird gespeichert eine Funktion ausgeführt werden kann, unabhängig davon, wo sie von gespeichert wird. Das Signal post_save liefert das erzeugte Argument, so dass Sie die Funktion nur ausführen, wenn das Objekt erstellt wird.

+0

danke! Wo sollte ich diese Funktion schreiben? In der ansichten.py? Außerdem importieren Sie "post_save" und verwenden dann "pre_save" im Empfänger. Welches ist das Richtige? :) –

+0

SCHÖN !!! Vielen Dank!!! :) Also, ja, ich schrieb es in der views.py und es ist post_save. _pre_save_ hat kein 'created' :) Danke! –

Verwandte Themen