Ответ 1
Это нормально, что django впоследствии создаст экземпляр администратора, поскольку сохранение всегда состоит из следующего:
- Создать объект пользователя
- Создать объект профиля (не может быть раньше, поскольку он указывает на пользователя).
При сохранении объекта User django ORM не может знать, что объект создания профиля появится после него, чтобы он не задерживал сигнал post_save каким-либо образом (даже не имеет смысла).
Лучший способ справиться с этим (imho), если вы хотите сохранить сигнал post_save, - это переопределить метод сохранения UserExtension
примерно так:
def save(self, *args, **kwargs):
try:
existing = UserExtension.objects.get(user=self.user)
self.id = existing.id #force update instead of insert
except UserExtension.DoesNotExist:
pass
models.Model.save(self, *args, **kwargs)
Обратите внимание, что это заставляет каждую вставку указывать одному и тому же пользователю, что и существующий объект, чтобы стать обновлением, это может быть неожиданное поведение для других частей кода.