我已经使用个人资料表扩展了我的用户桌面,但是用户网站的注册只询问用户类型的电子邮件和密码"客户"对于用户类型"发起人"还有另一个注册表格,需要其他字段,如出生日期,地址,国家,州,城市等。但登录后,如果我们进入帐户设置页面,两种类型的用户的帐户设置页面是相同的,&# 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
除了在客户注册时在个人资料表中创建一行,是否有其他解决方案可以解决此问题?
答案 0 :(得分:0)
如果对象不存在,OneToOneField将引发此异常。所以你必须抓住那个例外。
其他解决方案可能是使用hasattr,正如Sagar在评论中所建议的那样,但是如果你使用python<你应该知道一些潜在的issues。 3.2。