2013-11-07 3 views
0

Для моего проекта (Django 1.5) у меня установлено два приложения, один из которых называется учетными записями для аутентификации, а другой - профили, которые обрабатывают все манипуляции с профилями. Я построил модель пользовательского пользователя для приложения счета следующих настройки:Подключение пользователя к профилю

class CustomUser(AbstractBaseUser): 
    email = models.CharField() 
    username = models.CharField 
    is_staff... 

И для профиля приложения:

class UserProfile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    city = models.CharField() 
    state = models.... 

У меня есть вещи созданы так, потому что я не хотите, чтобы профили создавались при создании пользователя. Я хочу, чтобы он был создан при первом входе в систему.

Я пытаюсь создать modelForm, чтобы помочь в создании UserProfile. Я немного одурманен тем, как я получаю подписанный в настоящее время пользователь, чтобы сохранить его в OneToOneField. Я знаю, что это связано с методом инициализации формы, но я просмотрел документацию, и я не могу представить четкое решение. Пожалуйста помоги!! Поэтому я создал такую ​​форму, как:

class BasicProfile(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     exclude = ['foo'] 

Мой вопрос: Как ввести пользователя в мою форму? я могу просто использовать:

self.user = request.user 

ответ

0

Придумал это. @ Jay - спасибо за меня на курс.

forms.py:

class FormaholicsAnon(forms.Form): 
    name = forms.Char... 
    ... 

    def __init__(self, *args, **kwargs): 

     self.user = kwargs.pop('user', None) 
     super(FormaholicsAnon, self).__init__(*args, **kwargs) 

views.py:

# Make sure the current user is not anonymous 
if request.user.is_authenticated(): 
    form = FormaholicsAnon(request.POST, user=request.user) 
0

Если у вас есть AuthenticationMiddleware включен, объект запроса несет атрибут пользователя с ним. Итак - да, вы можете получить к нему доступ с помощью request.user.

Обратите внимание, что request.user также может быть django.contrib.auth.models.AnonymousUser. Вы должны будете убедиться, что работаете с «реальным» пользователем, сначала позвонив request.user.is_authenticated().

Использование исключений в ModelForms - это, как правило, плохая идея. Сначала это выглядит как хороший подход, но когда ваше приложение становится больше, и вы меняете свою модель пользователя с помощью этого одного скрытого поля, вы забыли добавить в exclude ..;)

+0

Спасибо за толчок в правильном направлении !! ура – parsenz

Смежные вопросы