【问题标题】:how to add custom user field in User of admin page of django?如何在 django 管理页面的用户中添加自定义用户字段?
【发布时间】:2019-12-12 20:56:09
【问题描述】:

有人会帮助我吗?我已经尝试了很多。我已阅读文档但不了解如何在管理页面的用户中添加自定义用户字段?每当我makemigrations 时,都会出现以下错误。

不同的页面

#admin.py
from django.contrib.auth.admin import UserAdmin
admin.site.register(UserProfile, UserAdmin)

#models.py
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):
    Id_card_number = models.CharField(max_length=15)

#forms.py
class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)._unique = True
    Id_card_number = forms.CharField(max_length=15, required=True)._unique = True
    class Meta:
        model = UserProfile
        fields  = ['username','email','password1','password2','Id_card_number']

每当我在 settings.py 中使用 AUTH_USER_MODEL = 'users.UserProfile' 时出错

错误:auth.User.groups:(fields.E304)反向访问器 “User.groups”与“UserProfile.groups”的反向访问器发生冲突。 提示:在“User.groups”或“UserProfile.groups”的定义中添加或更改related_name 参数。 auth.User.user_permissions: (fields.E304)“User.user_permissions”冲突的反向访问器 带有“UserProfile.user_permissions”的反向访问器。 提示:向“User.user_permissions”或“UserProfile.user_permissions”的定义添加或更改related_name 参数。 users.UserProfile.groups:(fields.E304)反向访问器 “UserProfile.groups”与“User.groups”的反向访问器冲突。 提示:在“UserProfile.groups”或“User.groups”的定义中添加或更改related_name 参数。 users.UserProfile.user_permissions: (fields.E304) 反向访问器 'UserProfile.user_permissions' 与反向访问器冲突 '用户.user_permissions'。 提示:在“UserProfile.user_permissions”或“User.user_permissions”的定义中添加或更改related_name 参数。

当我在 settings.py 中不使用 AUTH_USER_MODEL = 'users.UserProfile' 时出错

ERRORS: users.Profile.user: (fields.E301) 字段定义关系 使用已换出的模型“auth.User”。暗示: 将关系更新为指向“settings.AUTH_USER_MODEL”。

【问题讨论】:

标签: python html django


【解决方案1】:

您是否尝试过导入from django.contrib.auth.models import AbstractBaseUser?

然后您的用户将从 AbstractBaseUser 继承:

from django.contrib.auth.models import AbstractBaseUser
class UserProfile(AbstracBasetUser):
    Id_card_number = models.CharField(max_length=15)

【讨论】:

  • 是的,我试过了,但它给了我django.core.exceptions.FieldError: Unknown field(s) (username, email) specified for UserProfile
  • 好吧,您使用的是fields = ['username','email','password1','password2','Id_card_number'],但您的模型没有用户名也没有电子邮件,因此该错误是有道理的。该方法未在您的 UserProfile 模型中找到这些字段。
  • 我在 register.html 中使用了{{form|crispy}},并提供了额外的电子邮件和 Id_card_number。
【解决方案2】:

模型.py

from django.contrib.auth.models import User

class User(AbstractUser):
    password1 = models.CharField(max_length=250)
    password2 = models.CharField(max_length=250)

    class Meta:
        db_table = 'caccounts_user'
        verbose_name = 'User'

您可以在上面的代码的帮助下重写。放置上面的代码和make migation 然后migarte

【讨论】:

  • 我已经申请了,但是还是不行。我只是问了一个简单的问题。如何在用户管理页面中添加 Id_card_number 字段?我现在累了,但没人接听。
【解决方案3】:

我是这样做的,效果很好:


#models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # add additional fields in here

    def __str__(self):
        return self.email
#forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('username', 'email')

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email')
#admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username',]

admin.site.register(CustomUser, CustomUserAdmin)

在设置中:


AUTH_USER_MODEL = 'users.CustomUser'

【讨论】:

  • 我已经申请了,但是还是不行。我只是问了一个简单的问题。如何在用户管理页面中添加 Id_card_number 字段?我现在累了,但没人接听。
  • 你想添加Id_card_number字段显示在django-admin的登录页面吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-04
  • 2022-08-12
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多