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

2024-05-17 06:34:39 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我吗?我试了很多。我已经阅读了文档,但不明白如何添加自定义用户在管理页面的用户字段?每当我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']

在中使用AUTH_USER_MODEL = 'users.UserProfile'时出错设置.py

ERRORS: auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'UserProfile.groups'. HINT: Add or change a related_name argument to the definition for 'User.groups' or 'UserProfile.groups'. auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'UserProfile.user_permissions'. HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'UserProfile.user_permissions'. users.UserProfile.groups: (fields.E304) Reverse accessor for 'UserProfile.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for 'UserProfile.groups' or 'User.groups'. users.UserProfile.user_permissions: (fields.E304) Reverse accessor for 'UserProfile.user_permissions' clashes with reverse accessor for 'User.user_permissions'. HINT: Add or change a related_name argument to the definition for 'UserProfile.user_permissions' or 'User.user_permissions'.

在中不使用AUTH_USER_MODEL = 'users.UserProfile'时出错设置.py

ERRORS: users.Profile.user: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out. HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'.


Tags: orthepyauthpermissionsfieldsforwith
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'

你知道吗型号.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

你试过导入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)

相关问题 更多 >