Django - 用户pre_save似乎在验证后调用

时间:2013-08-03 09:46:24

标签: python django django-signals

如果在创建或更新用户时没有给出用户名,我需要生成用户名。

我虽然使用pre_save信号

@receiver(pre_save, sender=User, dispatch_uid='autocreate_username')
def create_username(sender, instance, **kwargs):
    if instance.username == None:
        instance.username = generate_random_username()

但是用户似乎是在信号呼叫之前插入的。

>>> user = User(email='machin@chouette.com')
>>> user.save()

Traceback (most recent call last):  
...  
IntegrityError: (1062, "Duplicate entry '' for key 'username'")

1 个答案:

答案 0 :(得分:0)

不是。

默认username设置为空字符串,而不是None,所以我做了

if not instance.username:

在我的信号回调中