在django-profile中添加字段first_name和last_name [英] add field first_name and last_name in django-profile

查看:171
本文介绍了在django-profile中添加字段first_name和last_name的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要添加与
相关联的 first_name last_name 用户模型,并显示在个人资料表单中。



字段:

 >>> user = User.objects.get(pk = 1)
>>> user.first_name
u'Some'
>>> user.last_name
u'User'

我的模型是像这样:

  class UserProfile(models.Model) :
user = models.ForeignKey(User,unique = True)
personal_email = models.EmailField(blank = True)
address = models.CharField(max_length = 140)
phone_number = models.CharField(max_length = 20)

def __unicode __(self):
return u'Profile of user:%s'%self.user.username

必须显示字段。

  first_name:
last_name:
personal_email:
地址:
phone_number:

修改



我解决了

#forms.py


  class UserProfileForm(forms.ModelForm):
fir st_name = forms.CharField(max_length = 30)
last_name = forms.CharField(max_length = 30)

def __init __(self,* args,** kwargs):
super (UserProfileForm,self).__ init __(* args,** kwargs)
self.fields ['first_name']。initial = self.instance.user.first_name
self.fields ['last_name']。 initial = self.instance.user.last_name

self.fields.keyOrder = [
'first_name',
'last_name',
'personal_email',
'address',
'phone_number',
]


def save(self,* args,** kwargs):
super UserProfileForm,self).save(* args,** kwargs)
self.instance.user.first_name = self.cleaned_data.get('first_name')
self.instance.user.last_name = self。 clean_data.get('last_name')
self.instance.user.save()

class Meta:
model = UserPro文件


#urls.py


  url(r'^ profiles / edit /',edit_profile,{'form_class':UserProfileForm },
name ='profiles_edit_profile'),


并添加#signals.py

  @receiver(post_save,sender = User)
def create_profile(sender,instance,created,** kwargs):
如果创建:
userprofile,new = UserProfile.objects.get_or_create(user = instance)


解决方案

假设您正在使用ModelForm,您可以执行以下操作:

  class profileForm(ModelForm):
first_name = forms.CharField(max_length = 30,required = False)
last_name = forms.CharField max_length = 30,required = False)
class Meta:
model = UserPro文件

def save(self,commit = True):
m = super(customerForm,self).save(commit = False)
#在此更新并保存用户模型
如果提交:
m.save()
返回m

你可以跳过覆盖保存方法并在视图中执行保存。只需获得第一个和最后一个名字的值,并在验证表单后保存。您可能还想使用一个交易来确保一切都可以保存或没有任何操作。


I need add the first_name and last_name fields associated with that User model and display it in the profile form.

fields:

   >>> user = User.objects.get(pk=1)
   >>> user.first_name
       u'Some'
   >>> user.last_name
       u'User'

My model is something like this :

class UserProfile(models.Model):
  user = models.ForeignKey(User, unique=True)
  personal_email = models.EmailField(blank=True)
  address = models.CharField(max_length=140)
  phone_number = models.CharField(max_length=20)

  def __unicode__(self):
      return u'Profile of user: %s' % self.user.username

when rendering the profile form, would have to show the fields.

first_name:  
last_name: 
personal_email:  
address: 
phone_number:

Edit

I resolved to:

#forms.py

class UserProfileForm(forms.ModelForm):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)

    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].initial = self.instance.user.first_name
        self.fields['last_name'].initial = self.instance.user.last_name

        self.fields.keyOrder = [
            'first_name',
            'last_name',
            'personal_email',
            'address',
            'phone_number',
            ]


    def save(self, *args, **kwargs):
        super(UserProfileForm, self).save(*args, **kwargs)
        self.instance.user.first_name = self.cleaned_data.get('first_name')   
        self.instance.user.last_name = self.cleaned_data.get('last_name')
        self.instance.user.save()

    class Meta:
        model = UserProfile

#urls.py

     url(r'^profiles/edit/', edit_profile, {'form_class': UserProfileForm},
                                             name='profiles_edit_profile'  ),

and add in #signals.py

    @receiver(post_save, sender=User)
    def create_profile(sender, instance, created, **kwargs):
        if created:
            userprofile, new = UserProfile.objects.get_or_create(user=instance)

解决方案

Assuming you are using a ModelForm you could do the following:

class profileForm(ModelForm):
    first_name = forms.CharField(max_length=30, required=False)
    last_name  = forms.CharField(max_length=30, required=False)
    class Meta:
        model = UserProfile

    def save(self, commit=True):
        m = super(customerForm, self).save(commit=False)
        # Update and save user model here
        if commit:
            m.save()
        return m

You could skip overriding the save methods and do the save in your view. Just get get the first and last name value and save it after you validate the form. You might also want to used a transaction to make sure everything saves or nothing does.

这篇关于在django-profile中添加字段first_name和last_name的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆