gpt4 book ai didi

python - Django-import-export post_save 调用了两次

转载 作者:行者123 更新时间:2023-12-03 16:22:16 24 4
gpt4 key购买 nike

我创建了一个从 AbstractUser 子类化的自定义用户和一个 post_save 信号以及一个打印新用户 ID 的接收器。

@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

最佳答案

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

class InvitationResource(ModelResource):

class Meta:
model = Invitation

def after_save_instance(
self, instance: Invitation, using_transactions: bool, dry_run: bool,
):
super().after_save_instance(instance, using_transactions, dry_run)
if dry_run is False:
send_invitation_email(instance)

关于python - Django-import-export post_save 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60124600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com