python - django 中的自定义用户模型

标签 python django model-view-controller django-models

我想使用 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.

所以我继承了我的Users类中的AbstractUser类,并添加了一个字段。但是,当我运行 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 上查看了其他问题,但无法解决错误。这是我的代码:

模型.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'

编辑:

我想将用户信息存储在与 auth_user 相同的表中,而不是在新表中。

最佳答案

我在我的一个项目中这样做过。我很惊讶地看到你扩展了 User 因为 the doc says something else :) 您可以扩展 Django 用户模型,但如果您只想添加新字段(而不是更改其行为),您应该使用 OneToOneField。

If you wish to store information related to User, you can use a one-to-one
relationship to a model containing the fields for additional information.

因此,正如您在链接中所见,您的代码应如下所示:

from django.contrib.auth.models import User

class MyUser(models.Model):
    user = models.OneToOneField(User)

    # Or a ForeingKey to the College table?
    college = models.CharField(max_length=40)

    other_data = ...

关于python - django 中的自定义用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199735/

相关文章:

Python按开始和结束字符拆分字符串

python - 如何分割手写数字

html - 如何根据从模型中获取的值动态更改div的背景颜色

python - 当值在列表中时 Pyspark 替换 DF 值

python - 从 Ubuntu 到 CentOs 的 bdist_rpm

python - psycopg2.DataError : invalid input syntax for integer: "test" Getting error when moving code to test server

python - 类型错误 : makedirs() got an unexpected keyword argument 'exists_ok'

python - 命名变量,最佳约定

c# - 如何在 Windows 窗体应用程序中使用 C#.NET 正确实现 MVC

model-view-controller - 使用 Joomla UpdateObject 方法使用同一表中的计算字段更新数据库字段