Как я могу предварительно заполнить форму регистрации с дополнительными данными в django-allauth после того, как я был связан с Facebook во время регистрации?Prepopulate пользовательские формы с социальными данными в django-allauth
В моих настройках я следующее
settings.py
SOCIALACCOUNT_AUTO_SIGNUP = False
Скажем, у меня есть UserProfile
модель с некоторыми данными, относящимися к пользователю.
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
gender = models.CharField(max_length=1)
Если я использую следующую форму, незарегистрированного пользователь может соединиться с Facebook и получает регистрационную форму для заполнения (экземпляр UserSignupForm
), где первое имя и фамилию уже предварительно заполнены. Как я могу автоматически заполнить пол, используя данные, собранные из Facebook? Другими словами, я хотел бы использовать пол, взятый из дополнительных данных facebook, в качестве исходных данных для формы регистрации.
settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'UserSignupForm'
forms.py
class UserSignupForm(forms.ModelForm):
first_name = forms.CharField(label=_('First name'), max_length=30)
last_name = forms.CharField(label=_('Last name'), max_length=30)
class Meta:
model = UserProfile
fields = ['first_name', 'last_name', 'gender']
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
self.instance.user = user
self.instance.user.save()
self.instance.save()
Мне кажется, что я должен изменить адаптер.
adapter.py
class UserProfileSocialAccountAdapter(DefaultSocialAccountAdapter):
def populate_user(self, request, sociallogin, data):
user = super(UserProfileSocialAccountAdapter, self).populate_user(request, sociallogin, data)
# Take gender from social data
# The following line is wrong for many reasons
# (user is not saved in the database, userprofile does not exist)
# but should give the idea
# user.userprofile.gender = 'M'
return user