首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-import-export post_save调用两次

Django-import-export post_save调用两次
EN

Stack Overflow用户
提问于 2020-02-08 14:50:24
回答 2查看 721关注 0票数 5

我创建了一个从AbstractUser派生的自定义用户、一个post_save信号和一个打印新用户id的接收器。

代码语言:javascript
复制
@receiver(post_save, sender=CustomUser, dispatch_uid='members.models.customuser.post_save')
def post_save_custom_user(sender, instance=None, created=False, **kwargs):         
    if not created:                                                                
        return                                                                     
    print('post_save_custom_user: {}'.format(instance.id))

当我通过管理界面创建一个新用户时,接收器被调用一次。当我使用django-import-export导入用户时,接收器被调用两次:一次是在导入文件的初始Submit之后,另一次是在Confirm Import之后。浏览我看到的代码,它在dry_run中创建用户,回滚事务并再次创建它。但是我如何在我的接收器中辨别这是否是一个预演呢?

我使用的是Python 3.6、Django 3.0.3、django-import-export 2.0.1

EN

回答 2

Stack Overflow用户

发布于 2020-05-20 06:00:55

看起来,django- import -export在导入确认时触发post_save,然后在导入之后再次触发。使用on_commit的建议对我不起作用,因此我不得不停止使用信号。不过,也有ModelResource.after_save_instace方法:

代码语言:javascript
复制
class MyResource(ModelResource):

    class Meta:
        model = MyModel
    
    def after_save_instance(
        self, instance: MyModel, using_transactions: bool, dry_run: bool,
    ):
        super().after_save_instance(instance, using_transactions, dry_run)
        if dry_run is False:
            my_model_on_save_action(instance)
票数 6
EN

Stack Overflow用户

发布于 2020-07-08 00:16:10

谢谢你这么做。有人知道为什么Django- import -export在confirm using dry_run = True的导入过程中为一个模型调用了两次save()方法吗?据我所知,导入数据只是临时保存到内存或磁盘中的临时位置,而不是实际写入数据库。

为了让我的解决方案工作,我需要使用上面的解决方案,在模型资源上使用after_save_instance,但是...对于使用CreateView的单实例添加,我需要调整我的form_valid方法,以便在创建模型的新实例时执行操作:

代码语言:javascript
复制
class MyCreateView(CreateView): 
    model = MyModel
    fields = [ 'email', 'name']

    def form_valid(self, form):
        self.object = form.save()
        self.object.save() 
        ## Perform action here like send email etc.
        return HttpResponseRedirect(self.get_success_url()) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60124600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档