Я использую пользовательскую форму для регистрации с django-allauth.UserProfile отсутствует объект User
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 не связан с любым объектом пользователя. Уже поздно, и я, наверное, пропустил что-то глупое, не так ли?
UPDATE: Кевин отметил, решение было добавить метод сохранения в 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()
Спасибо, Кевин! Это сработало для меня. Я уточню свой вопрос. –
@henriquea: Отлично, рады помочь. Единственное, что нужно отметить, это то, что вы, вероятно, не должны пытаться использовать этот «ModelForm» в других контекстах, так как ваш метод «save()» теперь затеняет «ModelForm.save()». Я только что подал [билет] (https://github.com/pennersr/django-allauth/issues/528) в django-allauth, предлагая изменить имя. –
Хорошо указал Кевин! Тогда я буду искать другую альтернативу. Ура! –