2017-01-25 1 views
0

다른 객체를 만드는 객체에 대한 perform_create가 있습니다.objet가 관리 사이트에서 생성 될 때 perfom_create하는 방법. 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() 

나는 DocumentDetail도 만들어집니다 DocumentDetailSample을 만들 때 볼 수있다.

"POST"를 만들 때 제대로 작동합니다.

내 문제는 DocumentDetailSamples도 관리 사이트에서 만들 수 있다는 것입니다. 그래서 ... 관리자 사이트에서 생성되면 perform_create이 더 이상 작동하지 않으며 DocumentDetail이 생성되지 않습니다.

어떻게해야합니까? "admin"DocumentDetailSample 생성 직후에 DocumentDetail을 생성하고 싶습니다.

답변

1

신호는 함수에게 모델의 인스턴스가 저장 될 때마다, 그것은에서 저장 상관없이 실행할 수 post_save 신호를 사용하여이 작업 (docs)

을위한 유용한 도구입니다. 객체가

from django.db.models.signals import post_save 
from django.dispatch import receiver 
from myapp.models import DocumentDetailSample 


@receiver(post_save, sender=DocumentDetailSample) 
def my_handler(sender, **kwargs): 
    if kwargs['created']: 
     query_set = User.objects.all() 
     ids = query_set.values_list('id', flat=True) 
     for i in ids: 
      doc_detail = DocumentDetail() 
      doc_detail.details_sample = kwargs['instance'] 
      doc_detail.user_id_id = str(i) 
      doc_detail.save() 
+0

감사를 만들 때 당신은 단지 기능을 실행할 수 있도록 post_save 신호가 생성 된 인수를 제공합니다! 어디에서 그 기능을 작성해야합니까? views.py에서? 또한 "post_save"를 가져온 다음 수신기에서 "pre_save"를 사용합니다. 맞습니까? :) –

+0

좋은! 감사!!! :) 그래, 나는 그것을 views.py에 썼다. 그것은 post_save이다. _pre_save_에는 'created'가 없습니다. :) 감사합니다! –

관련 문제