Python 在管理站点中创建对象时如何执行创建。Django RestFramework

Python 在管理站点中创建对象时如何执行创建。Django RestFramework,python,django,django-rest-framework,Python,Django,Django Rest Framework,我为一个对象创建了一个perform_create,它创建了另一个对象 class DocumentDetailSampleViewSet(viewsets.ModelViewSet): queryset = DocumentDetailSample.objects.all() serializer_class = DocumentDetailSampleSerializer def perform_create(self, serializer): d

我为一个对象创建了一个perform_create,它创建了另一个对象

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()
如您所见,当我创建DocumentDetailSample时,也会创建DocumentDetail

我发帖子的时候效果很好

我的问题是DocumentDetailSamples也可以在管理站点中创建。所以当它在管理站点中创建时,perform_create不再工作,DocumentDetail也不会创建


我能做什么?我想在创建AdminDocumentDetailSample之后创建DocumentDetail

信号是这项工作的有用工具

使用post_保存信号,您可以在每次保存模型实例时运行函数,无论从何处保存。post_save信号提供创建的参数,因此您只能在创建对象时运行该函数

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()

谢谢我应该在哪里写那个函数?在views.py中?此外,还可以导入post_save,然后在接收方中使用pre_save。哪个是正确的美好的谢谢!!!:所以,是的,我在views.py中写的,它是post_save。pre_save没有“已创建”:谢谢!