【问题标题】:Edit profile with ModelForm and UserProfile使用 ModelForm 和 UserProfile 编辑配置文件
【发布时间】:2011-02-21 12:42:30
【问题描述】:

我使用扩展的用户配置文件。现在我想制作个人资料版。我需要放置来自原始用户模型的所有自定义配置文件字段和电子邮件、名字、姓氏。 我尝试这样做,但无法使其工作。电子邮件字段未显示。没有显示任何用户模型。

我的表格:

class MainUserProfile(ModelForm):
    class Meta:
        model = User
        fields = ('email',)
class UserProf(MainUserProfile):    
    class Meta:
        model = UserProfile

我的看法:

form = UserProf(instance=request.user.get_profile())

更新:

我做到了:)这是代码:

class EditCustomerForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(EditCustomerForm, self).__init__(*args, **kwargs)
        try:
            self.fields['email'].initial = self.instance.user.email
            self.fields['first_name'].initial = self.instance.user.first_name
            self.fields['last_name'].initial = self.instance.user.last_name
        except User.DoesNotExist:
            pass

    required_css_class = 'required'
    error_css_class = 'error'

    email = forms.EmailField(label=_(u"Email"))
    first_name  = forms.CharField(max_length=30, required=True, label=_(u'Forname'))
    last_name  = forms.CharField(max_length=30, required=True, label=_(u'Surname'))
    address = forms.CharField(max_length=255, min_length=10, required=True, label=_(u'Address'))

    class Meta:
        model = UserProfile
        fields = ('email', 'first_name', 'last_name', 'address')

    def clean_email(self):
        return check_email(self.cleaned_data['email'], self.instance.user.id)

    def save(self, *args, **kwargs):
        u = self.instance.user
        u.email = self.cleaned_data['email']
        u.save()
        profile = super(EditCustomerForm, self).save(*args,**kwargs)
        return profile

视图中的表单:

if request.method == 'POST':
    form = EditCustomerForm(request.POST, instance=user)
else:
    form = EditCustomerForm(instance=user)

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您可以像这样将初始数据传递给表单:

    form = EditCustomerForm(instance=user, initial={
        'email' : user.email
        'first_name' : user.first_name
        'last_name' : user.last_name
      })
    

    【讨论】:

      【解决方案2】:

      我认为你可以使用

      UserProf(Modelform):
      

      在视图中用户 .save() 用于两种形式

      【讨论】:

        【解决方案3】:

        我认为你不能使用 ModelForm 继承 - http://code.djangoproject.com/ticket/7018 - 包含一个类似的示例。

        您可以使用formsets 来组合这两种形式,或者如果这是通过管理员使用内联。

        【讨论】:

          猜你喜欢
          • 2010-12-10
          • 1970-01-01
          • 2021-09-02
          • 2023-03-11
          • 2012-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          相关资源
          最近更新 更多