2011-05-22 59 views
5

我需要添加具有 是User模型相关联的first_namelast_name领域,并在轮廓form显示。加场FIRST_NAME和姓氏在Django瞩目

领域:

>>> 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: 
address: 
phone_number: 

编辑

我决定

#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' ), 

和#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) 

回答

3

添加假设你正在使用的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 = 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 

你可以跳过覆盖保存方法并在视图中进行保存。只要获得姓名和姓氏值,并在验证表格后进行保存即可。您可能还想使用事务来确保一切都保存或不做任何事情。

+1

这样就不得不做一个'views'并创建一个'urls'? – 2011-05-22 04:25:29

相关问题