【问题标题】:django rest_auth extend User with UserProfiledjango rest_auth 使用 UserProfile 扩展用户
【发布时间】:2015-03-09 10:43:00
【问题描述】:

我在 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 模型,只是为了了解管理这些数据的地点和人员。

从外壳访问:

    from django.contrib.auth.models import User
a = User.objects.get(username="myuser")
a.profilo_utente.company_name                  # see current value

【问题讨论】:

    标签: django-models django-forms django-rest-framework


    【解决方案1】:

    您正试图在保存主对象之前添加到关系中,如果配置文件是在一个信号中创建的,它们在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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2011-02-15
      • 1970-01-01
      • 2017-11-14
      • 2017-06-04
      • 2015-05-18
      • 1970-01-01
      相关资源
      最近更新 更多