由于许多细节会使这篇文章太长的原因,我正在使用自定义用户模型,以及django注册和监护人。Django:手动设置is_active = True,没办法?
一切工作都很顺利,但我试图做到这一点,所以每个注册的用户都会自动设置为活动状态,所以“他们”(现在只有我模拟用户)可以立即登录。我迄今为止的做法是通过在SQL表中手动将该字段设置为“1”(True)。
看来,无论我如何安排东西,is_active
标志总是False
,直到我在SQL中手动更改它,即使我将它打印到我的控制台并且它在注册时显示为True。
我没有得到它通过改变user.save()
到user.save(commit=True)
工作,这确实让is_active
标志True
并允许用户登录,但它总是抛出一个错误,指出:
TypeError: save() got an unexpected keyword argument 'commit'
当然,这是全部用于测试目的,并且我做打算介绍电子邮件验证,但我很感兴趣,为什么我不能简单地设置标志和save()
。
这里是我的register/forms.py
:
class GeneralUserForm(UserCreationForm):
business_name = forms.CharField(required=True)
class Meta:
model = GeneralUser
fields = ['username', 'email', 'password1',
'password2', 'business_name']
# TODO: only create all objects if no error is found
def save(self, commit=True):
user = super(GeneralUserForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
# TODO: create permissions, including groups.
if commit:
user.is_active = True # remove before deployment
print(user.is_active)
user.save() # LINE I CHANGED
business = Business.objects.create(name=self.cleaned_data['business_name'], owner=user)
business.save()
mng_grp = create_perms_for_biz(business, user)
user.groups.add(mng_grp)
return user
而我register/models.py
:
class GeneralUser(AbstractUser, GuardianUserMixin):
username = models.CharField(
('username'),
max_length=150,
unique=True,
help_text=('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
error_messages={
'unique': ("A user with that username already exists."),
},
)
password = models.CharField(max_length=100)
email = models.EmailField(('email address'), blank=True)
is_active = models.BooleanField(
('active'),
default=True,
help_text=(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
objects = UserManager()
date_joined = models.DateTimeField(('date joined'), default=timezone.now)
business_name = models.CharField(('business name'), max_length=150, blank=True)
USERNAME_FIELD = 'username'
def email_user(self, subject, message, from_email=None, **kwargs):
"""
Sends an email to this User.
"""
send_mail(subject, message, from_email, [self.email], **kwargs)
def get_custom_anon_user(User):
return User(
username='AnonymousUser',
)