2017-10-20 108 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', 
    ) 

回答

相關問題