Python 在管理站点中创建对象时如何执行创建。Django RestFramework
我为一个对象创建了一个perform_create,它创建了另一个对象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
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没有“已创建”:谢谢!