我使用一对一字段扩展了我的帐户自定义用户模型,它工作得很好。但是当我尝试自定义它以显示更多信息时,例如staff_number和location,返回以下错误:
<class 'accounts.admin.staffAdmin'>:(admin.E033)“ordering[0]”的值引用“username”,它不是“accounts.clinic_staff'"的属性。
staffAdmin类没有将用户名列为list_display,clinic_staff只是返回用户名。我被困在该怎么办?
这是我的帐户> models.py代码:
from datetime import date
import email
import imp
from pyexpat import model
from tkinter import CASCADE
from tkinter.tix import Tree
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class MyAccountManager(BaseUserManager):
def create_user(self, email, username, password=None,):
if not email:
raise ValueError('Email address is required')
if not username:
raise ValueError('Username is required')
user = self.model(
email=self.normalize_email(email),
username = username,
)
user.set_password(password)
user.save(using = self.db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(
email=self.normalize_email(email),
password = password,
username = username,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using = self.db)
return user
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
#is_clinic_staff = models.BooleanField(default=False)
#staff_number = models.CharField(max_length=10, unique=True)
is_superuser = models.BooleanField(default=False) #note for self - these fields are required
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username',]
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_admin # note to self - required
def has_module_perms(self, app_Label):
return True
class clinic_staff(models.Model):
staff = models.OneToOneField(Account, on_delete=models.CASCADE)
location = models.CharField(max_length=255)
staff_number = models.IntegerField()
def __str__(self):
return self.staff.username
字符串
我的帐户admin.py代码
from django.contrib import admin
from .models import clinic_staff
from accounts.models import Account
from accounts.models import clinic_staff
from django.contrib.auth.admin import UserAdmin
class AccountAdmin(UserAdmin):
list_display = ('email', 'username', 'date_joined', 'last_login', 'is_admin', 'is_staff')
search_field = ('email', 'username',)
readonly_field = ('date_joined', 'last_login')
filter_horizontal = ()
list_filter = ()
fieldsets = () # note to self: required field
class staffAdmin(UserAdmin):
list_display = ('location', 'staff_number')
search_field = ('location', 'staff_number')
filter_horizontal = ()
list_filter = ()
fieldsets = ()
admin.site.register(Account, AccountAdmin)
admin.site.register(clinic_staff, staffAdmin)
型
3条答案
按热度按时间b4lqfgs41#
我遇到了同样的问题,并通过以下方式解决了它:
在admin.py中添加ordering属性,如:
字符串
pn9klfpd2#
更新:
My django ver:4.2
解决方案:根据django文档,解决方案很简单,只需添加一个ordering字段即可。
友情链接:https://docs.djangoproject.com/en/4.2/topics/auth/customizing/
字符串
fcwjkofz3#
好的,我知道了。
如果不在生产环境中,请尝试删除数据库
并运行
manage.py makemigrations manage.py migrate