2012-08-27 45 views
0

views.py

def profile(request,nav="profile",template="profile.html",context = {},extra_context = None): 
    if request.POST: 
     if 'profileFormSubmit' in request.POST: 
      pform = UserProfileForm(request.POST,instance = request.user) 
      if pform.is_valid(): 
       user = pform.save() 

       return redirect(profile,nav="account") 
      else: 
       context['data'] ={'nav_menu': ['account','profile','reviews','favourites'], 
       'cur_nav':nav} 
       context['pform'] = pform 
       context['rform'] = PartialSignupForm() 
       context['lform'] = LoginForm() 
       context['aform'] = AccountsForm() 
       return render_to_response(template,context,context_instance = RequestContext(request)) 
     else: 
      return redirect(profile,nav="profile") 


    else: 
     context['rform'] = PartialSignupForm() 
     context['lform'] = LoginForm() 
     context['aform'] = AccountsForm() 

     context['pform'] = UserProfileForm(instance = request.user) 
     context['data'] ={'nav_menu': ['account','profile','reviews','favourites'], 
       'cur_nav':nav} 
     context['reviews'] = request.user.review_set.all() 
     if extra_context is not None: 
      context.update(extra_context) 
     return render_to_response(template,context,context_instance = RequestContext(request)) 

forms.py

更新用户资料
class UserProfileForm(forms.ModelForm): 
    sex = forms.CharField(max_length = 20,label="I am :",widget=forms.Select(choices=SEX_CHOICES,attrs = {'class':''}),required = False) 
    first_name = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Please enter your real name.','class':''}),required = False) 
    last_name = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Enter last name.','class':''}),required = False) 
    location = forms.CharField(max_length = 50,widget = forms.TextInput(attrs={'placeholder':'Enter your current location','class':''}),required = False) 
    def clean_first_name(self): 
     first_name = self.cleaned_data['first_name'] 
     if first_name == '': 
      raise forms.ValidationError("This field is required.") 
     return first_name 
    def clean_phone(self): 
     phone = self.cleaned_data['phone'] 
     if phone == '': 
      raise forms.ValidationError("This field is required.") 
     return phone 

    def clean_last_name(self): 
     last_name = self.cleaned_data['last_name'] 
     if last_name == '': 
      raise forms.ValidationError("This field is required.") 
     return last_name 

    def clean_profession(self): 
     profession = self.cleaned_data['profession'] 
     if profession == "": 
      raise forms.ValidationError("Select a valid option.") 
     return profession 

    def clean_sex(self): 
     sex = self.cleaned_data['sex'] 
     if sex == "": 
      raise forms.ValidationError("Select a valid option.") 
     return sex 
    def clean_location(self): 
     location = self.cleaned_data['location'] 
     if location == "": 
      raise forms.ValidationError("This field is required.") 
     return location 

    def __init__(self,*args,**kw): 
     super(UserProfileForm,self).__init__(*args,**kw) 
     self.phone = self.instance.get_profile().phone 
     self.profession = self.instance.get_profile().profession 
     self.sex = self.instance.get_profile().sex 
     self.location = self.instance.get_profile().location   

    def save(self,*args,**kw): 
     self.instance.first_name = self.cleaned_data.get("first_name") 
     self.instance.last_name = self.cleaned_data.get("last_name") 
     profile = self.instance.get_profile() 
     profile.sex = self.cleaned_data.get("sex") 
     profile.location = self.cleaned_data.get("location") 
     profile.profession = self.cleaned_data.get("profession") 
     profile.phone = self.cleaned_data.get("phone") 
     profile.save() 
     self.instance.save() 
     return self.instance 

    class Meta: 
     model = User 
     #fields = ('username','email','password','confirm_password','first_name','last_name','sex','phone','profession') 
     fields = ('first_name','last_name','phone','sex','profession','location') 

models.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    phone = models.CharField(max_length = 40,blank=False,default = "") 
    location = models.CharField(max_length = 100,blank=False,default = "") 
    sex = models.CharField(max_length = 10,blank = False,default = "") 
    profession = models.CharField(max_length = 50,blank = False,default = "") 

疑问

我不能够理解当我渲染配置文件表单进行编辑,只有名字和姓氏在那里,但是当我填写细节并提交表单时,它对用户配置文件进行了更改,但重新加载配置文件表单时未使用值表单userprofile启动,只设置了first_name和last_name值,我明白,该表单是用户模型表单,但仍然当我用用户配置文件值启动它时,我是否没有得到预期的结果,请提供帮助,谢谢。的Django使用的ModelForm

回答

2

UserProfileForm

class Meta: 
    model = User 

需要改变到

class Meta: 
    model = UserProfile 
+0

是的,这是一个肯定的解决方案,但我只想为模型用户,谢谢 – Abhimanyu

1

由于Karthikr说,你的形式加载从用户模型(姓/名)的值,而不是从价值用户配置文件。如果您想要显示正确的值,则需要根据正确的模型(此情况下为UserProfile)启动表单。