如何在Django UserCreationForm中设置is_active = False

时间:2018-01-01 11:26:03

标签: django-forms

我想在django中使用"从django.contrib.auth.forms导入UserCreationForm"创建用户时进行电子邮件验证。当用户注册到我的站点时,将创建一个用户,但他的活动状态将为false。并且验证码将被发送到他的电子邮件地址,当他输入验证码时,他的帐户将被激活。

为此,我想设置:

is_active = False

当他输入验证码时,它将被设置为:

is_active = True

但默认值为is_active = True。那我怎么能做到False

2 个答案:

答案 0 :(得分:4)

保存表单后,将显示返回用户对象。然后,您可以使用该对象来编辑is_active状态:

form = UserCreationForm(request.POST)
if form.is_valid():
    user = form.save()
    # default to non-active
    user.is_active = False
    user.save()

您可以改为在post_save信号中管理对User实例的更新(这是一种更通用的方法,将在创建新用户时起作用)。在<your_app>/signals.py(未测试)中:

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def default_to_non_active(sender, instance, created, **kwargs):
    if created:
        instance.is_active = False
        instance.save()

参考tutorial,以获取有关信号的更多信息。

答案 1 :(得分:3)

您可以使用此示例激活或取消激活状态:

user = User.objects.create()
user.is_active = False
user.save()