以下代码的想法应该是,只有当字段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
)
答案 0 :(得分:1)
你可以set the default value for a field to a callable object。
或者,您可以尝试使用post_save处理程序,在那里可以检查created
是否为True
。此外,在保存后检查verify_pin中的值可能会有所帮助,以查看它是否确实已设置。