简体   繁体   English

如何在Django的管理页面的用户中添加自定义用户字段?

[英]how to add custom user field in User of admin page of django?

Will anybody help me? 有人会帮助我吗? I have tried so much. 我已经尝试了很多。 I have read documentation but not understanding how to add custom user field in User of admin page? 我已阅读文档,但不了解如何在“管理页面的用户”中添加自定义用户字段? Whenever I makemigrations , it gives me following error. 每当我进行makemigrations ,都会出现以下错误。

Different pages 不同的页面

#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']

Error whenever I use AUTH_USER_MODEL = 'users.UserProfile' in settings.py 每当我在settings.py中使用AUTH_USER_MODEL = 'users.UserProfile'时发生错误

ERRORS: auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'UserProfile.groups'. 错误:auth.User.groups:(fields.E304)“ User.groups”的反向访问器与“ UserProfile.groups”的反向访问器发生冲突。 HINT: Add or change a related_name argument to the definition for 'User.groups' or 'UserProfile.groups'. 提示:在“ User.groups”或“ UserProfile.groups”的定义中添加或更改related_name参数。 auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'UserProfile.user_permissions'. auth.User.user_permissions :(字段E304)“ User.user_permissions”的反向访问器与“ UserProfile.user_permissions”的反向访问器冲突。 HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'UserProfile.user_permissions'. 提示:在“ User.user_permissions”或“ UserProfile.user_permissions”的定义中添加或更改related_name参数。 users.UserProfile.groups: (fields.E304) Reverse accessor for 'UserProfile.groups' clashes with reverse accessor for 'User.groups'. users.UserProfile.groups :(字段E304)“ UserProfile.groups”的反向访问器与“ User.groups”的反向访问器冲突。 HINT: Add or change a related_name argument to the definition for 'UserProfile.groups' or 'User.groups'. 提示:在“ UserProfile.groups”或“ User.groups”的定义中添加或更改related_name参数。 users.UserProfile.user_permissions: (fields.E304) Reverse accessor for 'UserProfile.user_permissions' clashes with reverse accessor for 'User.user_permissions'. users.UserProfile.user_permissions :(字段E304)“ UserProfile.user_permissions”的反向访问器与“ User.user_permissions”的反向访问器冲突。 HINT: Add or change a related_name argument to the definition for 'UserProfile.user_permissions' or 'User.user_permissions'. 提示:在“ UserProfile.user_permissions”或“ User.user_permissions”的定义中添加或更改related_name参数。

Error whenever I don't use AUTH_USER_MODEL = 'users.UserProfile' in settings.py 每当我在settings.py中不使用AUTH_USER_MODEL = 'users.UserProfile'时发生错误

ERRORS: users.Profile.user: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out. 错误:users.Profile.user:(fields.E301)字段定义了与模型auth.User的关系,该关系已换出。 HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'. 提示:将关系更新为指向“ settings.AUTH_USER_MODEL”。

Have you tried importing from django.contrib.auth.models import AbstractBaseUser ? 您是否尝试from django.contrib.auth.models import AbstractBaseUser

Your User will then inherit from AbstractBaseUser: 然后,您的用户将从AbstractBaseUser继承:

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

model.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'

You can over write with the help of above code. 您可以在上述代码的帮助下改写。 place the above code and make migation then migarte 把上面的代码,并make migation然后migarte

I did it this way and is working perfectly fine: 我是这样做的,并且工作得很好:


#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)

And in settings: 并在设置中:


AUTH_USER_MODEL = 'users.CustomUser'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM