用户没有django表单的个人资料

时间:2016-11-03 07:33:58

标签: python django

我已经使用个人资料表扩展了我的用户桌面,但是用户网站的注册只询问用户类型的电子邮件和密码"客户"对于用户类型"发起人"还有另一个注册表格,需要其他字段,如出生日期,地址,国家,州,城市等。但登录后,如果我们进入帐户设置页面,两种类型的用户的帐户设置页面是相同的,&# 39;为什么帐户设置我创建了一个django表单。

  class userAccountSettingsForm(forms.Form):
      email = forms.EmailField(required = True, max_length=50, widget=forms.EmailInput(attrs={
          'class' : 'custome-input promote-input', 
          'autocomplete' : 'off',
          'data-empty-message' : 'Please enter a email.',
          'data-error-message' : 'Please enter a valid email.',
          'readonly' : 'readonly'
      }))
      firstname = forms.CharField(required = True, max_length=50, widget=forms.TextInput(attrs={
          'class' : 'custome-input promote-input', 
          'autocomplete' : 'off',
          'data-empty-message':'Please enter first name.' 
      }))
      lastname = forms.CharField(required = True, max_length=50, widget=forms.TextInput(attrs={
          'class' : 'custome-input promote-input', 
          'autocomplete' : 'off',
          'data-empty-message':'Please enter last name.' 
      }))
      dob = forms.DateField(required = False, widget=forms.DateInput(attrs={
          'class' : 'custome-input promote-input',
          'id' : 'custom-datepicker',
          'autocomplete' : 'off',
          'readonly':'readonly'
      }))
      phone = forms.IntegerField(required = True, widget=forms.TextInput(attrs={
          'class' : 'custome-input promote-input',
          'autocomplete' : 'off',
          'data-empty-message':'Please enter mobile number.'
      }))
      address = forms.CharField(required = False, max_length=225, widget=forms.TextInput(attrs={
          'class' : 'custome-input promote-input',
          'autocomplete' : 'off'
      }))
      subscription = forms.BooleanField(required = False)

问题是,在注册启动器时,它还会在配置文件表中创建其行,而在注册客户时,它只会在用户表中创建行,这就是为什么在帐户设置页面中我必须找到用户的数据来自模型,我在django表格的帮助下这样做,这是我的观点: -

dobForm=""
if my_details.profile.dob:
    dobForm = datetime.strptime(str(my_details.profile.dob), '%Y-%m-%d').strftime('%m/%d/%Y')
settingsForm = userAccountSettingsForm(
    initial={
        'email': my_details.email,
        'firstname': my_details.first_name,
        'lastname': my_details.last_name,
        'dob': dobForm,
        'phone':my_details.profile.phone_number,
        'address':my_details.profile.address,
        'subscription':my_details.profile.subscription,
        }
    )

因此,使用此页面可以获取用户所有现有数据,如果是用户类型启动器,则不会产生任何问题,因为在注册时已经为配置文件表中的启动器生成了一行,但是在客户的情况下在注册时不会在配置文件表中为客户生成行,并且在这种情况下它会给出错误: -

RelatedObjectDoesNotExist at /home/account-settings

    User has no profile

除了在客户注册时在个人资料表中创建一行,是否有其他解决方案可以解决此问题?

1 个答案:

答案 0 :(得分:0)

如果对象不存在,OneToOneField将引发此异常。所以你必须抓住那个例外。

其他解决方案可能是使用hasattr,正如Sagar在评论中所建议的那样,但是如果你使用python<你应该知道一些潜在的issues。 3.2。