Как зарегистрировать пользователя с помощью пользовательской модели пользователя

#django #django-models

#django #django-модели

Вопрос:

Когда я регистрирую пользователя в пользовательской форме входа, я получаю следующую ошибку:

Ошибка атрибута: Менеджер недоступен; ‘auth.Пользователь» заменен на «App.MyUser»

Views.py

 def signup(request):
    if request.method == 'POST':
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            userObj = form.cleaned_data
            username = userObj['username']
            password = userObj['password']
            fname = userObj['fname']
            lname = userObj['lname']
            print (username,password,fname,lname)
            if(len(password)<8):
                messages.error(request,"This password length should be minimum 8 characters")
                #raise ValidationError("This password length should be minimum 8 characters ")
            validate_password_strength(password)
            if not (User.objects.filter(username=username).exists()):
                p = Event(fname=fname, lname=lname, username=username)
                p.set_password(password)
                p.save()
                # return HttpResponseRedirect('Login.html')
                return redirect('/Login/')
            else:
                raise forms.ValidationError('Looks like a username with that username or password already exists')
    else:
        form = UserRegistrationForm()
    return render(request, 'signup.html', {'form':form})
  

settings.py:

 AUTHENTICATION_BACKENDS = ("django.contrib.auth.backends.ModelBackend",
                               'django.contrib.auth.backends.RemoteUserBackend',)
AUTH_USER_MODEL = 'App.Event'
  

urls.py

 urlpatterns = [
        url('admin/', admin.site.urls),
        url('Appname/', include('django.contrib.auth.urls')),
        url(r'^signup/', views.signup,name='signup'),
        url(r'^Login/', views.Login,name='Login'),
        url(r'^Logout/', views.Logout,name='Logout'),
    ]
  

models.py

 class MyUserManager(BaseUserManager):
    def create_user(self, fname, lname, username, password):
        """
        Creates and saves a User with the given username, date of
        birth and password.
        """
        if not username:
            raise ValueError('Users must have an username')
        user = self.model(username=username, fname=fname, lname=lname)
        user.set_password(password)
        user.is_active = True
        user.save(using=self._db)
        print(user)
        return user

    def create_superuser(self, fname, lname, username, password, email=None):
        """
        Creates and saves a superuser with the given username and password.
        """
        user = self.create_user(
            fname=fname,
            lname=lname,
            username=username,
            password=password,
        )
        user.is_admin = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class Event(AbstractBaseUser):
    fname = models.CharField('fname', max_length=120)
    lname = models.CharField('lname', max_length=120)
    username = models.CharField('username', max_length=60, unique=True)
    password = models.CharField('password', max_length=120, default='xxxxxx@2789')

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['fname', 'lname']

    objects = MyUserManager()

    def __unicode__(self):
        return self.username

    class Meta:
        # managed = False
        db_table = "user"
  

Когда я меняю App.MyUser на auth.User , вход в систему не происходит, хотя он возвращает имя пользователя и пароль, но когда я меняю auth.User на App.MyUser , вход в систему не происходит, и он выдает ошибку. Итак, как заставить оба работать с одним и тем же AUTH_USER_MODEL .

Комментарии:

1. Имя вашей пользовательской модели пользователя — Event, а не User,

2. @Bidhan Majhi я использую только app.Event.

3. Вы используете это AUTH_USER_MODEL = 'auth.User' там, где у вас нет никакой модели пользователя

4. @BidhanMajhi Я отредактировал свой вопрос, я использую только AUTH_USER_MODEL = ‘App.Event’.

Ответ №1:

Поскольку ваша пользовательская модель пользователя является Event , она должна быть

 AUTH_USER_MODEL = 'your_app_name.Event'
  

где your_app_name это имя модели приложения django, к которой принадлежит Event

Ответ №2:

Вы заменили пользовательскую модель, но по-прежнему выполняете запрос явно к пользователю в строке:

 if not (User.objects.filter(username=username).exists()):
  

Это должно быть событие, а не пользователь. Но обратите внимание, что вам вообще не следует этого делать; UserRegistrationForm уже проверяет уникальность. Все это условие должно быть удалено.