Я хочу создать заказную модель пользователя, используя django.contrib.auth.models.AbstractUser
, как указано в djangodocs:Пользовательские модели пользователя в Джанго
If you’re entirely happy with Django’s User model and you just want to add some additional profile information, you can simply subclass django.contrib.auth.models.AbstractUser and add your custom profile fields. This class provides the full implementation of the default User as an abstract model.
Так что я унаследовал AbstractUser
класс в моем Users
классе и добавил поле. Но когда я бегу python manage.py syncdb
я получаю следующее сообщение об ошибке:
CommandError: One or more models did not validate:
admin.logentry: 'user' has a relation with model login.users, which has either
not been installed or is abstract.
я прошел через другие вопросы по StackOverflow, но не мог решить эту ошибку. Вот мой код:
models.py
from django.conf import settings
from django.db import models
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import AbstractUser
from django.contrib import admin
class Users(AbstractUser):
college = models.CharField(max_length=40)
admin.site.register(Users, UserAdmin)
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from login.models import Users
from django import forms
class UsersChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = Users
class UsersAdmin(UserAdmin):
form = UsersChangeForm
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('college',)}),
)
admin.site.register(Users, UsersAdmin)
settings.py
INSTALLED_APPS = (
'forms',
'login',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
AUTH_USER_MODEL = 'login.users'
EDIT:
Я хочу сохранить информацию о пользователе в той же таблице, что и auth_user
, а не в новой таблице.
это коалиция имен? Можете ли вы попробовать другое название модели, кроме «class Users (AbstractUser)):' – Charlesliam
@Charlesliam после смены имени с 'User' на' MyUser' и запущенного 'python manage.py syncdb', я получаю новую ошибку' 1146, Table stalker.login_myuser_user_permissions не существует django' –
Ваша новая таблица для разрешения пользователя должна быть _ _user_permissions. Который я верил из вашего заявления. Ваше имя приложения - 'login', а ваше имя модели -' myuser'. Вы можете попробовать вручную добавить таблицу в свой db. –
Charlesliam