所有这一切的拳头是我在这里的第一个实际帖子,所以请保持温和。
我已经和Django一起工作了几个星期,并通过在Google和Google上搜索来克服大部分麻烦,但是在尝试允许用户编辑他们的个人资料时我似乎陷入了困境。特别允许用户编辑我扩展到普通Django用户的字段。
我能够允许用户查看和更新常规Django用户中包含的所有信息,但是当表单显示" company_name"字段,它不会自动填充当前值,如果用户键入其他公司,则不会保存。
Forms.py
class EditUserProfileForm(UserChangeForm):
class Meta:
model = UserProfile
fields= ('company_name','password',)
class EditUserForm(UserChangeForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'password')
Views.py
def edit_profile(request):
content = {}
profile = request.user.get_username()
if request.method == 'POST':
form = EditUserProfileForm (request.POST, instance=request.user)
form2 = EditUserForm (request.POST, instance=request.user)
content['form'] = form
content['form2'] = form2
if form.is_valid() and form2.is_valid():
new_user = form.save()
new_user2 = form2.save()
return render(request, 'website/view_profile.html', content)
else:
content['form.errors'] = form.errors
content['form2.errors'] = form2.errors
else:
form = EditUserProfileForm(instance=request.user)
form2 = EditUserForm(instance=request.user)
content['form']= form
content['form2'] = form2
return render(request, 'website/edit_profile.html', content)
Models.py (不确定是否有必要)
class UserProfile(models.Model):
user = models.OneToOneField(User)
verified_email = models.BooleanField(blank=True, default = False)
company_name = models.CharField(max_length=100, blank=False)
def __unicode__(self):
return self.user.username
如果有任何其他可能需要的代码段来帮助我,请告诉我。
谢谢!
答案 0 :(得分:1)
因此,对于遇到此问题的其他人,我找到了解决方案。
在我的views.py中,我不得不改变这个:
form = EditUserProfileForm(instance=request.user)
到此:
form = EditUserProfileForm(instance=request.user.userprofile)
这最终使我能够查看我的扩展UserProfile信息。但是忽略了改变它我不得不覆盖UserChangeForm的clean_password方法,最终刚刚从UserChangeForm中删除了我需要的东西并最终得到了这个:
<强> Forms.py 强>
class EditUserProfileForm(forms.ModelForm):
"""
This class is a carbon copy of the UserChangeForm class from
django.contrib.auth.forms, with the password functionality deleted, and
the form is modified to allow changes to be made to the
UserProfle, which extends the Django User
"""
class Meta:
model = UserProfile
fields = ('company_name',)
def __init__(self, *args, **kwargs):
super(EditUserProfileForm, self).__init__(*args, **kwargs)
f = self.fields.get('user_permissions', None)
if f is not None:
f.queryset = f.queryset.select_related('content_type')
class EditUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email')
def __init__(self, *args, **kwargs):
super(EditUserForm, self).__init__(*args, **kwargs)
f = self.fields.get('user_permissions', None)
if f is not None:
f.queryset = f.queryset.select_related('content_type')