Django 管理员在模型中无法识别空白=真



当我尝试在Django管理面板中编辑用户(使用自定义UserChangeForm)时,验证坚持认为我在模型中设置的blank=True字段是必需的。

我不知道从哪里开始解决这个问题;我对CustomUserCreationForm也有同样的问题,但恢复到使用默认值,按预期工作(要求username,password1&password2,创建用户(display_name,bioprofile_picture字段为空)。

models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
display_name = models.CharField(max_length=30, blank=True, null=True)
bio = models.TextField(blank=True, null=True)
profile_picture = models.ImageField(upload_to='images/', blank=True, null=True)

def save(self, *args, **kwargs):
if not self.display_name:
self.display_name = self.username
super().save(*args, **kwargs)
def __str__(self):
return self.username

forms.py:

from django import forms
from django.contrib.auth.forms import UserChangeForm
from .models import CustomUser
class CustomUserChangeForm(UserChangeForm):
display_name = forms.CharField(label="display_name")
bio = forms.CharField(widget=forms.Textarea)
profile_picture = forms.ImageField(label="profile_picture")
class Meta():
model = CustomUser
fields = ("username", "email", "display_name", "bio", "profile_picture")

admin.py:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserChangeForm
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm
fieldsets = (
(None, 
{'fields': ('username', 'password', 'email', 'display_name', 'bio', 'profile_picture')}
),
)
model = CustomUser
list_display = ["username", "email",]
admin.site.register(CustomUser, CustomUserAdmin)

来自Django文档:

默认情况下,每个Field类都假定该值是必需的,因此如果您传递一个空值- None或空字符串(") -然后clean()将引发ValidationError异常:

所以你必须在你的forms.py中添加required=False。例如:

display_name = forms.CharField(required=False, label="display_name")

最新更新