В нашем проекте мы подклассифицируем модель AbstractUser
из Django:
class User(AbstractUser):
username = None
email = models.EmailField(max_length=255, unique=True)
first_name = models.CharField(max_length=50)
last_name_prefix = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50)
registered_on = models.DateTimeField(default=now, editable=False)
organizations = models.ManyToManyField(
"Organization", through="UserOrganization"
)
USERNAME_FIELD = "email"
REQUIRED_FIELDS: List[str] = []
def __str__(self):
if not self.last_name_prefix:
return f"{self.first_name} {self.last_name}"
return f"{self.first_name} {self.last_name_prefix} {self.last_name}"
Мы хотим удалить поле имени пользователя, и, как указано в Django документах, вы сделаете это, установив поле на None
. Однако мы также используем mypy, и он жалуется, что тип None несовместим со значениями, которые он ожидает для charfield:
error: Incompatible types in assignment (expression has type "None", base class "AbstractUser" defined the type as "CharField[Union[str, int, Combinable], str]")
Я также попытался удалить поле с помощью delattr
, которое сработало, но не не подхвачено Django миграциями. Я знаю, что можно использовать '# type: ignore', но есть ли какой-либо способ исправить это (кроме переписывания класса AbstractUser и его удаления там)?