расширение пользовательской модели django

#django #extending

#django #расширение

Вопрос:

Я расширяю пользовательский объект в django и создаю профиль пользователя. Итак, используя хук post_save, я сохраняю профиль пользователя следующим образом:

 class UserProfile(models.Model):
    user = models.OneToOneField(User)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        userObj, createdUser = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=User)
  

Это отлично работает, когда я запускаю оболочку через python manage.py оболочка; сохранение объекта пользователя и профиля пользователя в таблицах, но если я протестирую, запустив запрос, в views.py для обработки этого запроса я делаю следующее

 def handleRequest(request):
    user = User(username="test",email="test",password="test")

    user.save()
  

Конечно, я создал HttpResponse и также вернул ответ, но опустил его для краткости. В результате я получаю запись пользователя, сохраненную в auth_user, но без профиля пользователя. В чем дело? Пожалуйста, помогите.

Комментарии:

1. вы смотрели на django-profiles ?

Ответ №1:

не удается получить доступ к профилю пользователя, потому что у вас в профиле пользователя есть связь.

вам нужно добавить поля.

 class UserProfile(models.Model):
    url = models.URLField()
    home_address = models.TextField()
    phone_numer = models.PhoneNumberField()
    user = models.ForeignKey(User, unique=True)
  

для получения дополнительной информации перейдите по следующей ссылке

http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

Комментарии:

1. да, я уже смотрел на эту строку раньше, и она не будет работать последовательно. Я проведу расследование и попробую это снова .. Я видел множество ссылок в Интернете о том, как расширить пользовательскую модель … но со всеми из них возникли проблемы. Тем временем я больше не использую перехват post_save и просто создаю объект профиля пользователя вручную в методе обработчика запроса в файле view. Спасибо за ссылку.