Как я отмечал в комментариях, я предложил дать username
фиктивное значение для сохранения модели на данный момент, а затем изменить значение после сохранения
def _create_user(self, username=None, email=None, password=None,
**extra_fields):
"""
Create and save a user with the given email, and password.
"""
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.username = self.model.normalize_username('placeholder')
user.set_password(password)
user.save(using=self._db)
user.username = '{}'.format(user.id) # As the 'id' will always be unique
user.save(using=self._db)
return user
Значение username
со значением 'placeholder'
будет каждый раз изменяться на значение id
, поэтому не возникает проблем с уникальностью имени пользователя.