Я пытаюсь разрешить пользователям LDAP входить в мое приложение Django. Каждому пользователю нужны дополнительные атрибуты, которые я хочу сохранить в модели профиля пользователя.
Я реализовал сигнал 'post_save' для создания userprofile при первоначальном входе в систему, однако обнаружил, что у пользователей LDAP созданный флаг всегда имеет значение False, даже если они никогда ранее не входили в систему.
Единственный раз created = True
- это когда я создаю нового суперпользователя, используя manage.py
Мой post_save выглядит так:
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
print(sender)
print("USERPROFILE1: {0} with id {1}".format(instance, instance.pk))
print("CREATION: {0}".format(created))
if created:
print("USERPROFILE3")
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
print("USERPROFILE2")
instance.userprofile.save()
При первом входе в систему профиль никогда не создается, поскольку «создан» всегда равен «Ложь»
<class 'django.contrib.auth.models.User'>
USERPROFILE1: lbird with id 1
CREATION: False
User has no userprofile. while authenticating
[...]
django.contrib.auth.models.User.userprofile.RelatedObjectDoesNotExist: User has no userprofile.