Django接收器检查是否首先创建

时间:2013-12-28 21:54:10

标签: python django django-models

以下代码的想法应该是,只有当字段verification_pin为空时,即在新记录上时,它才会触发。但是,似乎每次我保存模型时都会生成一个忽略if instance.verification_pin is None语句的新引脚,为什么,我错过了什么?

@receiver(pre_save, sender=CompanyUser)
def my_callback(sender, instance, *args, **kwargs):
    if instance.verification_pin is None:
        instance.verification_pin = instance.generate_pin()
        instance.is_active = False
        instance.send_verification_pin()

型号:

class CompanyUser(User):
    verification_pin = models.IntegerField(max_length=4, null=True)
    objects = UserManager()

    def generate_pin(self):
        """
        Returns a random four digit pin.
        """
        return random.randint(999, 9999)

    def send_verification_pin(self):
        self.email_user(
            subject="Test",
            message="Your pin: %s" % self.verification_pin,
            from_email=settings.DEFAULT_FROM_EMAIL
        )

1 个答案:

答案 0 :(得分:1)

你可以set the default value for a field to a callable object

或者,您可以尝试使用post_save处理程序,在那里可以检查created是否为True。此外,在保存后检查verify_pin中的值可能会有所帮助,以查看它是否确实已设置。