2017-10-20 7 views
1

Pour un tas de raisons que les détails rendront ce post trop long, j'utilise un modèle utilisateur personnalisé, aux côtés de django-registration, et guardian.Django: Set is_active = True manuellement, pas moyen?

Tout fonctionne très bien, mais j'essaie de faire en sorte que tous les utilisateurs enregistrés soient automatiquement configurés pour être actifs, donc "ils" (en ce moment, seuls les utilisateurs émulant) peuvent se connecter instantanément. La façon dont je l'ai fait jusqu'ici est en définissant manuellement ce champ à "1" (True) dans la table SQL.

Il semble que peu importe comment je arrange les choses, le drapeau is_active est toujours False jusqu'à ce que je le change manuellement en SQL, même si je l'affiche sur ma console et qu'il affiche Vrai quand je m'enregistre.

Je ne le faire fonctionner en changeant user.save()-user.save(commit=True), qui fait faire le is_active drapeau True et permet à l'utilisateur d'ouvrir une session, mais il jette toujours une erreur qui dit:

TypeError: save() got an unexpected keyword argument 'commit'

Bien sûr, tout cela est à des fins de test et Je fais intention d'introduire la vérification par courriel, mais je suis très intrigué sur pourquoi je ne suis pas en mesure de simplement définir le drapeau et save().

Voici mon 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 

Et mon 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', 
    ) 

Répondre