2017-10-20 107 views
1

由于许多细节会使这篇文章太长的原因,我正在使用自定义用户模型,以及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', 
    ) 

回答

相关问题