【问题标题】:add field first_name and last_name in django-profile在 django-profile 中添加字段 first_name 和 last_name
【发布时间】:2011-05-22 01:21:11
【问题描述】:

我需要添加与关联的 first_namelast_name 字段 User 模型并将其显示在配置文件 form

字段:

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

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    假设您使用的是 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
    

    您可以跳过覆盖保存方法并在您的视图中进行保存。只需在验证表单后获取名字和姓氏值并保存即可。您可能还想使用事务来确保一切都保存或不保存。

    【讨论】:

    • 这样就得创建一个views并创建一个urls?
    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 2019-05-27
    • 2017-10-12
    • 2012-07-18
    • 2012-07-25
    • 2019-06-13
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多