Django Admin не распознает blank=True в модели

Когда я пытаюсь отредактировать пользователя (используя пользовательскую форму UserChangeForm) в панели администратора Django, валидация настаивает на том, что поля, которые я установил blank=True в модели, являются обязательными.

Я не знаю, с чего начать решение этой проблемы; у меня была такая же проблема с CustomUserCreationForm, но я вернулся к использованию значения по умолчанию, которое работает как ожидалось (запрашивает username, password1 & password2, создает пользователя с пустыми полями display_name, bio и profile_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:

Поэтому вы должны добавить required=False в ваш forms.py. Например:

display_name = forms.CharField(required=False, label="display_name")
Вернуться на верх