UserProfile отсутствует объект User

Я использую пользовательскую форму регистрации с django-allauth.

settings.py

ACCOUNT_SIGNUP_FORM_CLASS = 'project.userprofile.form.UserSignupForm'

form.py

from django import forms
from models import UserProfile

class UserSignupForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('mobile_number',)

модели.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    mobile_number = models.CharField(max_length=30, blank=True, null=True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

Создаются объекты User и UserProfile, однако UserProfile не связан ни с одним объектом User. Уже поздно, и я, наверное, пропустил что-то глупое, верно?

ОБНОВЛЕНИЕ. Как указал Кевин, решение состояло в том, чтобы добавить метод сохранения в form.py. Вот как это выглядит сейчас:

from django import forms
from django.contrib.auth.models import User
from models import UserProfile

class UserSignupForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        fields = ('mobile_number',)

    def save(self, user):
        profile = UserProfile(user=user)
        profile.mobile_number = self.cleaned_data['mobile_number']
        profile.save()

person Community    schedule 02.02.2014    source источник


Ответы (1)


В документации говорится:

[ACCOUNT_SIGNUP_FORM_CLASS] должен реализовать метод «сохранения», принимая нового зарегистрированного пользователя в качестве единственного параметра.

Похоже, вы не предоставили такой метод, поэтому пользователь никогда не подключается к профилю. И я думаю, что вы не видите ошибки, потому что ModelForm имеет метод save(commit=True), который совпадает с этой сигнатурой, даже если он не делает то, что вы хотите.

person Kevin Christopher Henry    schedule 02.02.2014
comment
Спасибо, Кевин! Это сработало для меня, я обновлю свой вопрос. - person ; 02.02.2014
comment
@henriquea: Отлично, рад помочь. Единственное, что следует отметить, это то, что вам, вероятно, не следует пытаться использовать этот ModelForm в других контекстах, так как ваш метод save() теперь затеняет ModelForm.save(). Я только что подал билет на django-allauth, предлагая изменить имя. - person Kevin Christopher Henry; 03.02.2014
comment
Хорошо указал Кевин! Тогда буду искать другую альтернативу. Ваше здоровье! - person ; 03.02.2014