当前位置: 首页 > 面试题库 >

如何防止灯具与django post_save信号代码冲突?

相俊迈
2023-03-14
问题内容

在我的应用程序中,我想在新用户注册时在某些表中创建条目。例如,我要创建一个用户个人资料,然后将参考他们的公司和一些其他记录。我用post_save信号实现了这一点:

def callback_create_profile(sender, **kwargs):
    # check if we are creating a new User
    if kwargs.get('created', True):
        user = kwargs.get('instance')
        company = Company.objects.create(name="My Company")
        employee = Employee.objects.create(company=company, name_first=user.first_name, name_last=user.last_name)
        profile = UserProfile.objects.create(user=user, employee=employee, partner=partner)
# Register the callback
post_save.connect(callback_create_profile, sender=User, dispatch_uid="core.models")

运行时效果很好。我可以使用admin创建一个新用户,其他三个表也可以获取有意义的条目。(除非是雇员,因为保存时未在管理员表单中填写user.first_name和user.last_name。我仍然不明白为什么要这样做)

问题出在我运行测试套件时。在此之前,我创建了一堆夹具以在表中创建这些条目。现在我得到一个错误,指出:

IntegrityError: duplicate key value violates unique constraint "core_userprofile_user_id_key"

我认为这是因为我已经在设备中创建了ID为“ 1”的公司,员工和档案记录,现在post_save信号正在尝试重新创建它。

我的问题是:运行灯具时可以禁用此post_save信号吗?我可以检测到我正在作为测试套件的一部分运行,而不创建这些记录吗?我现在应该从固定装置中删除这些记录吗(尽管信号只设置了默认值,而不是我想测试的值)?夹具加载代码为什么不仅仅覆盖创建的记录?

人们如何做到这一点?


问题答案:

我想我想出了一种方法来做到这一点。与信号一起传递的kwarg中有一个“ raw”参数,因此我可以用以下参数替换上面的测试:

if (kwargs.get('created', True) and not kwargs.get('raw', False)):

Raw在运行loaddata时使用。这似乎可以解决问题。



 类似资料:
  • 我正在尝试将reddog rdap服务器war文件部署到项目中的嵌入式Jetty中。但每次我得到这个爱神: JAVAlang.LinkageError:加载程序约束冲突:解析方法“org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;”当前类org/slf4j/LoggerFactory的类加载器

  • 我使用信号量,我希望当列表大小为零时,线程等待其他线程,但为什么信号量不停止执行?信号量不是像notify和wait一样工作吗? 结果:add remove add Exception in thread“Thread-2”java.lang.IndexOutOfBoundsException:Index:0,Size:0

  • 我正在使用Javaexec运行bash脚本,但当我进入CTRL C时,Java进程将退出,子进程也将退出,如何在JVM关闭后保持子进程运行? 父母亲上海: 我已经在这里和这里阅读了类似问题的答案,例如,使用nohup在脚本运行命令中启动父bash脚本,或者使用trap命令来阻止信号,在我的研究中,它可以工作,例如“tail-f somefile”,但不适用于我的用例“ffmpeg-params”,

  • 冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并,那么过程看起来是这样的 拉取的时候,Git自动合并,并产生了一次提交。 如果Git不能够自动合并,那么会提示 这个时候我们就可以知道README.MD有冲突,需要我们手动解决,修改RE

  • 问题内容: 我有点困惑,PHP中有很多函数,有些使用这个,有些使用那个。有些人使用:,,等 哪个是正确的,你们通常使用什么? 这是正确的吗(如果有的话,建议我做一个更好的): 该行可以防止MySQL注入和XSS攻击? 顺便说一句,除了XSS攻击和MySQL注入之外,还有其他需要注意的事情吗? 编辑 结论: 如果我想将字符串插入数据库,则无需使用,只需使用即可。在显示数据时,请使用,这是您的全部意思

  • 我用的是JavaFX。 当某个文件没有加载时,我希望阶段关闭,该实例中的代码停止执行。