为超级用户排除某些字段
Exclude certain fields for the users who are superusers
我正在尝试制作一个自定义用户模型并具有出生日期、当前级别和其他此类参数等参数。当我 运行 python manage.py createsuperuser
时,会报错说这些值不能为空。我不希望超级用户帐户使用这些参数。我该怎么办?
我尝试将以下行添加到继承自 UserAdmin class 的 class
排除 = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')
这是模型字段
class Learner(AbstractBaseUser):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=255, unique=True)
date_of_birth = models.DateField(auto_now=False, auto_now_add=False)
currentLevel = models.ForeignKey(SubLevelConcepts, related_name='currentLevel', on_delete=models.CASCADE)
totalStars = models.IntegerField(default=0)
badges = models.IntegerField(default=0)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
superuser = models.BooleanField(default=False)
objects = LearnerManager()
这是管理员class
class LearnerAdmin(UserAdmin):
add_form = LearnerCreationForm
form = LearnerChangeForm
model = Learner
exclude = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')
list_display = (
'first_name',
'last_name',
'email',
'staff',
'active'
)
list_filter = (
'email',
'active'
)
fieldsets = (
(None, {'fields': ('email', 'password',)}),
('Permissions', {'fields': ('staff', 'active')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'first_name', 'last_name','password1', 'passsword2', 'staff', 'active')}
)
)
search_fields = ('email',)
ordering = ('id',)
filter_horizontal = ()
这是我最后的错误 运行 python manage.py createsuperuser
django.db.utils.IntegrityError: (1048, "Column 'currentLevel_id' cannot be null")
我希望超级用户只需获取电子邮件和密码即可完成工作。我稍后会添加 first_name 和 last_name
将 null=True
和 default=None
添加到您的 ForeignKey
字段,这样它就不是必需的,即
class Learner(AbstractBaseUser):
# ...
currentLevel = models.ForeignKey(SubLevelConcepts, null=True, related_name='currentLevel', on_delete=models.CASCADE)
您可能还想使用 models.PROTECT
或 models.SET_NULL
而不是 models.CASCADE
- 除非您真的希望在匹配 SubLevelConcept
时删除您的用户帐户删了,就是...
您可能还想查看 blank=True
models field option FWIW。
我正在尝试制作一个自定义用户模型并具有出生日期、当前级别和其他此类参数等参数。当我 运行 python manage.py createsuperuser
时,会报错说这些值不能为空。我不希望超级用户帐户使用这些参数。我该怎么办?
我尝试将以下行添加到继承自 UserAdmin class 的 class 排除 = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')
这是模型字段
class Learner(AbstractBaseUser):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=255, unique=True)
date_of_birth = models.DateField(auto_now=False, auto_now_add=False)
currentLevel = models.ForeignKey(SubLevelConcepts, related_name='currentLevel', on_delete=models.CASCADE)
totalStars = models.IntegerField(default=0)
badges = models.IntegerField(default=0)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
superuser = models.BooleanField(default=False)
objects = LearnerManager()
这是管理员class
class LearnerAdmin(UserAdmin):
add_form = LearnerCreationForm
form = LearnerChangeForm
model = Learner
exclude = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')
list_display = (
'first_name',
'last_name',
'email',
'staff',
'active'
)
list_filter = (
'email',
'active'
)
fieldsets = (
(None, {'fields': ('email', 'password',)}),
('Permissions', {'fields': ('staff', 'active')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'first_name', 'last_name','password1', 'passsword2', 'staff', 'active')}
)
)
search_fields = ('email',)
ordering = ('id',)
filter_horizontal = ()
这是我最后的错误 运行 python manage.py createsuperuser
django.db.utils.IntegrityError: (1048, "Column 'currentLevel_id' cannot be null")
我希望超级用户只需获取电子邮件和密码即可完成工作。我稍后会添加 first_name 和 last_name
将 null=True
和 default=None
添加到您的 ForeignKey
字段,这样它就不是必需的,即
class Learner(AbstractBaseUser):
# ...
currentLevel = models.ForeignKey(SubLevelConcepts, null=True, related_name='currentLevel', on_delete=models.CASCADE)
您可能还想使用 models.PROTECT
或 models.SET_NULL
而不是 models.CASCADE
- 除非您真的希望在匹配 SubLevelConcept
时删除您的用户帐户删了,就是...
您可能还想查看 blank=True
models field option FWIW。