(Django) Почему мой логин работает только для таблицы db:auth_user и не работает для другой таблицы:myapp_user?
Простите за плохой английский!
В моем проекте есть функция входа в систему, например:
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import auth
from django.http import HttpResponseRedirect
from django.shortcuts import render
def log_in(request):
form = AuthenticationForm(request.POST)
if request.method == "POST":
form = AuthenticationForm(data=request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
user = auth.authenticate(request,username=username,password=password)
if user is not None and user.is_active:
auth.login(request,user)
return HttpResponseRedirect('/index')
context = {
'form': form,
}
return render(request, 'login.html', context)
Эта функция может работать для любых учетных записей, которые сохраняются в таблице базы данных:auth_user, но не может работать для моего класса User:
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser )
class User(AbstractBaseUser):
username = models.CharField(unique=True,max_length=20,default="")
email = models.EmailField()
date_of_birth = models.DateField()
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = AccountManager()
USERNAME_FIELD = 'username' #類似主鍵的功用
REQUIRED_FIELDS = ['email','username'] #必填
def __str__(self):
return self.email
def is_staff(self):
return self.is_admin
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return self.is_admin
Если я использую страницу регистрации для создания данных новой учетной записи, она сохраняется в таблице:function_user("function" - имя моего приложения), и если я войду в таблицу:auth_user accounts, она перейдет в /index, это правильно, но когда я вхожу в новую учетную запись, она ничего не делает, я действительно уверен, что имя пользователя и пароль уже созданы в таблице:function_user.
register (кажется, работает правильно, данные сохраняются в function_user):
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/index')
else:
form = RegisterForm()
context = {'form': form}
return render(request, 'register.html', context)
Я хочу, чтобы моя вновь созданная учетная запись пользователя (т.е. function_user) могла войти в дополнение к auth_user.
Спасибо, что прочитали.
Добавили ли вы пользовательскую модель пользователя в файл settings.py
добавьте следующую строку в settings.py
замените users на имя вашего приложения, в котором присутствует ваша пользовательская модель User
AUTH_USER_MODEL = 'users.User'