django rest_auth 使用 UserProfile 扩展用户
django rest_auth extend User with UserProfile
我在 django 1.7.5 上使用 allauth 和 rest_auth。
成功创建带有新字段的自定义 SignupForm,但无法获取注册时存储的值。
company_name是被忽略的字段,名字和姓氏被存储...
1) rest_auth/forms.py
class SLCustomSignupForm(forms.Form):
""" in settings ACCOUNT_SIGNUP_FORM_CLASS='rest_auth.forms.SLCustomSignupForm' """
first_name = forms.CharField(max_length=30, label='Nome')
last_name = forms.CharField(max_length=30, label='Cognome')
company_name = forms.CharField(max_length=30, label='Azienda')
def signup(self, request, user):
"""
Invoked at signup time to complete the signup of the user.
"""
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.profilo_utente.company_name = self.cleaned_data['company_name']
user.save()
在rest_auth/models.py
from django.contrib.auth.models import User
from django.db import models
from allauth.account.models import EmailAddress
class ProfiloUtente(models.Model):
user = models.OneToOneField(User, related_name='profilo_utente')
company_name = models.CharField(max_length=100)
def __unicode__(self):
return "{}'s profile".format(self.user.username)
class Meta:
db_table = 'profilo_utente'
def account_verified(self):
if self.user.is_authenticated:
result = EmailAddress.objects.filter(email=self.user.email)
if len(result):
return result[0].verified
return False
User.profilo_utente = property(lambda u: ProfiloUtente.objects.get_or_create(user=u)[0])
我已经使用 ProfiloUtente 修改了提供的 UserProfile 模型,只是为了了解管理这些数据的地点和人员。
从 shell 访问:
from django.contrib.auth.models import User
a = User.objects.get(username="myuser")
a.profilo_utente.company_name # see current value
您正在尝试在保存主对象之前添加关系,如果配置文件是在信号中创建的,那么在 user.save()
调用之前它们将不存在。
尝试
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
user.profilo_utente.company_name = self.cleaned_data['company_name']
user.profilo_utente.save()
我在 django 1.7.5 上使用 allauth 和 rest_auth。
成功创建带有新字段的自定义 SignupForm,但无法获取注册时存储的值。
company_name是被忽略的字段,名字和姓氏被存储...
1) rest_auth/forms.py
class SLCustomSignupForm(forms.Form):
""" in settings ACCOUNT_SIGNUP_FORM_CLASS='rest_auth.forms.SLCustomSignupForm' """
first_name = forms.CharField(max_length=30, label='Nome')
last_name = forms.CharField(max_length=30, label='Cognome')
company_name = forms.CharField(max_length=30, label='Azienda')
def signup(self, request, user):
"""
Invoked at signup time to complete the signup of the user.
"""
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.profilo_utente.company_name = self.cleaned_data['company_name']
user.save()
在rest_auth/models.py
from django.contrib.auth.models import User
from django.db import models
from allauth.account.models import EmailAddress
class ProfiloUtente(models.Model):
user = models.OneToOneField(User, related_name='profilo_utente')
company_name = models.CharField(max_length=100)
def __unicode__(self):
return "{}'s profile".format(self.user.username)
class Meta:
db_table = 'profilo_utente'
def account_verified(self):
if self.user.is_authenticated:
result = EmailAddress.objects.filter(email=self.user.email)
if len(result):
return result[0].verified
return False
User.profilo_utente = property(lambda u: ProfiloUtente.objects.get_or_create(user=u)[0])
我已经使用 ProfiloUtente 修改了提供的 UserProfile 模型,只是为了了解管理这些数据的地点和人员。
从 shell 访问:
from django.contrib.auth.models import User
a = User.objects.get(username="myuser")
a.profilo_utente.company_name # see current value
您正在尝试在保存主对象之前添加关系,如果配置文件是在信号中创建的,那么在 user.save()
调用之前它们将不存在。
尝试
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
user.profilo_utente.company_name = self.cleaned_data['company_name']
user.profilo_utente.save()