#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 уже проверяет уникальность. Все это условие должно быть удалено.