【问题标题】:Model Not showing in Django Admin created using built in AbstractUser模型未显示在使用内置 AbstractUser 创建的 Django Admin 中
【发布时间】:2020-07-31 03:44:00
【问题描述】:

我使用 Django 内置的 User 创建了一个自定义用户模型,并添加了我自己的字段。 当我尝试运行代码时出现错误。 我到处搜索,我没有得到这个错误的答案。

我已经用空的 admin.py 运行了代码,它非常适合登录/注销和注册 但是我在 Django admin 中没有任何显示。

然后经过一些研究,我得到了下面提到的代码,但仍然出现错误!

模型.py

from django.db import models
from django.contrib.auth.models import BaseUserManager,AbstractBaseUser

class MyAccountManager(BaseUserManager):
    def create_user(self, email, username, address,phone_number,password=None):
        if not email:
            raise ValueError('Users must have an email address')
        if not username:
            raise ValueError('Users must have a username')

        user = self.model(
            email=self.normalize_email(email),
            username=username,
            address=address,
            phone_number=phone_number,
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, address,phone_number,password):
        user = self.create_user(
            email=self.normalize_email(email),
            password=password,
            username=username,
            address=address,
            phone_number=phone_number,
        )
        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class CustomUser(AbstractBaseUser):
    email = models.EmailField(verbose_name="email",max_length=60,unique=True)
    username= models.CharField(max_length=30,unique=True)
    phone_number= models.IntegerField()
    address=models.CharField(max_length=300)
    is_active=models.BooleanField(default=True)
    is_admin=models.BooleanField(default=False)
    is_staff=models.BooleanField(default=False)
    is_superuser=models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username','address','phone_number']

    objects = MyAccountManager()

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

forms.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
from django import forms
from . models import CustomUser

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = UserChangeForm.Meta.fields

class UserCreateform(UserCreationForm):

    class Meta(UserCreationForm.Meta):

        model = CustomUser
        fields = UserCreationForm.Meta.fields+('address','phone_number')

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
from .forms import UserCreateform,CustomUserChangeForm

class UserAd(UserAdmin):
    add_form = UserCreateform
    form = CustomUserChangeForm
    model = CustomUser

    list_display = ("email","username","address","phone_number","is_staff")
    list_filter = ("is_staff","is_superuser","is_active","groups")
    search_fields = ("username","email")
    ordering=("username")
    filter_horizontal=("groups","user_permissions",)
    fieldsets = (
     ( None, {"fields": ("username","password")}),
     ( ("Personal Info"),{"fields":("email","address","phone_number")}),
     ( ("Permissions"),{"fields":("is_admin","is_active","is_staff","is_superuser","groups","user_permissions")}),
     ( ("Important Dates"),{"fields":("last_login","date_joined")}),
    )
    add_fieldsets = (
     (
        None,
        {
        "classes":("wide",),
        "fields":("username","password1","password2"),
        },
     ),
    )

admin.site.register(CustomUser, UserAd)

错误信息!

<class 'account.admin.UserAd'>: (admin.E019) The value of 'filter_horizontal[0]' refers to 'groups', which is not an attribute of 'account.CustomUser'.
<class 'account.admin.UserAd'>: (admin.E019) The value of 'filter_horizontal[1]' refers to 'user_permissions', which is not an attribute of 'account.CustomUser'.
<class 'account.admin.UserAd'>: (admin.E031) The value of 'ordering' must be a list or tuple.
<class 'account.admin.UserAd'>: (admin.E116) The value of 'list_filter[3]' refers to 'groups', which does not refer to a Field.

【问题讨论】:

  • 我对错误消息有同样的问题。您在 filter_horizontal 中引用了组,但我没有看到代码中任何地方定义的模型字段或您继承的任何内容。

标签: python django django-models django-admin django-users


【解决方案1】:

错误 1: &lt;class 'account.admin.UserAd'&gt;: (admin.E019) The value of 'filter_horizontal[0]' refers to 'groups', which is not an attribute of 'account.CustomUser'.

建议一: 看起来您正在尝试过滤用户所属的组,但是因为组不是管理员失败的 CustomUser 模型类的属性。

错误 2: &lt;class 'account.admin.UserAd'&gt;: (admin.E019) The value of 'filter_horizontal[1]' refers to 'user_permissions', which is not an attribute of 'account.CustomUser'.

建议二: 与第一个建议相同。您的代码引用了不存在的 CustomUser 类的属性。

错误 3: &lt;class 'account.admin.UserAd'&gt;: (admin.E031) The value of 'ordering' must be a list or tuple.

建议三: 即使元组仅包含单个值,单值元组也需要后跟逗号。应该是: ordering = ("username",)

错误 4: &lt;class 'account.admin.UserAd'&gt;: (admin.E116) The value of 'list_filter[3]' refers to 'groups', which does not refer to a Field.

建议四: 与第一个建议相同。您的代码引用了不存在的 CustomUser 类的属性。

看起来这张其他海报对你有类似的要求。也许他们的解决方案对您有用: In Django admin, how to filter users by group?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 2017-09-14
    • 2013-08-28
    • 2018-04-23
    • 2012-10-15
    • 1970-01-01
    • 2016-09-19
    • 2011-10-17
    相关资源
    最近更新 更多