В потребителския профил липсва потребителският обект

Използвам персонализиран формуляр за регистрация с 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',)

models.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 не е свързан с нито един потребителски обект. Късно е и вероятно пропускам нещо глупаво, нали?

АКТУАЛИЗАЦИЯ: Както Кевин посочи, решението беше да се добави методът за запазване във 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