Уже два дня бьюсь над автоматическим созданием профиля пользователя. Изначально была модель профиля class UserProfile(models.Model): user = OneToOneField(User) Потребовалось автоматически создавать профиль при создании пользователя (создаются только через админку). Почитав на форумах попробовал использовать AutoOneToOneField из django-annoying, который должен бы создавать профиль при его отсутствии по обращению, вместо OneToOneField. Результата не дало, нормальной документации к этому чуду не нашел. Во вьюхе пробовал вызывать info = UserProfile.objects.get(user=request.user). Еще почитав, был найден способ создания профиля по сигналам от django.contrib.auth.models.User. Но и им воспользоваться я не смог, как бы не пытался.

def add_profile(sender, instance, created, **kwargs):
    if created:
        user_profile = UserProfile(user=instance)
        user_profile.save()

post_save.connect(add_profile, sender = User)

Прошу помочь. Спасибо.

задан 03 Фев '12, 19:35

fixer's gravatar image

fixer
56712
Одобрено: 50%


В одном из проектов я делал так и работало:

def user_save_callback(sender, **kwargs):
    user = kwargs['instance']
    user_profile, user_profile_created = UserProfile.objects.get_or_create(user=user)

post_save.connect(user_save_callback, sender=User)
Постоянная ссылка

отвечен 05 Фев '12, 17:38

Berg's gravatar image

Berg ♦♦
5565813
Одобрено: 77%

Не работает

(05 Фев '12, 19:20) fixer fixer's gravatar image

А какие симптомы ? ошибки может? Просто проект щас работает на Django 1.3.1 и уверяю - у меня этот сигнал срабатывает для создания профиля.

(06 Фев '12, 02:08) Berg ♦♦ Berg's gravatar image

Ошибок нет. Вставлял в user_save_callback print 'test' - не вывелось. До создания профиля даже дело не доходит.

(06 Фев '12, 19:34) fixer fixer's gravatar image

В Django 1.3, используется новый декоратор @receiver:

from django.db.models.signals import post_save from django.dispatch import receiver

@receiver(post_save, sender=User) def create_profile(sender, instance, created, **kwargs): """Create a matching profile whenever a user object is created.""" if created: profile, new = UserProfile.objects.get_or_create(user=instance)

попробуйте такой вариант вместо моего ?

(07 Фев '12, 03:20) Berg ♦♦ Berg's gravatar image

Спасибо. Работает.

(07 Фев '12, 12:53) fixer fixer's gravatar image
Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

По RSS:

Ответы

Ответы и комментарии

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованый список: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • основные теги HTML, также поддерживаются

Теги вопроса:

×19
×2
×1

заданые вопросы: 03 Фев '12, 19:35

просмотренные вопросы: 6,980 times

последние обновления: 07 Фев '12, 12:53