2013-10-13 21 views
8

我試圖讓用戶能夠創建和編輯他們的個人資料,一旦他們註冊。我正在使用模型表單。我需要做的是將僱主模型字段填入當前用戶。如何更新現有檔案Django的雛型

這是我的觀點:

def update_profile(request, username): 
    if request.method == 'POST': 
     edit_profile_form=EditProfileForm(request.POST) 
     if edit_profile_form.is_valid(): 
      editprofile = edit_profile_form.save(commit=False) 
      editprofile.employer = request.user.get_profile() 
      editprofile.save() 
    edit_profile_form = EditProfileForm() 
    context = {'edit_profile_form':edit_profile_form,} 
    return render(request, 'pandaboard/editprofile.html', context) 

這裏是我的模型:

class Profile(models.Model): 
    employer = models.ForeignKey(User) 
    company_name = models.CharField(max_length=100) 
    company_description = models.TextField() 
    company_website = models.URLField(max_length=200, blank=True) 
    contact_email = models.EmailField(max_length=100) 
    contact_name = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.company_name 

這裏是我的雛型

from django.forms import ModelForm 
from pandaboard.models import JobPost, Profile 
from django.contrib.auth.models import User 

class EditProfileForm(ModelForm): 
    class Meta: 
     model = Profile 
     fields = ['company_name','company_description','company_website','contact_email','contact_name'] 
+0

「EditProfileForm」是Profile的ModelForm嗎?請張貼您的表格課程。 – Brandon

+0

好的,我添加了我的模型表格 –

+0

更新模型時,通常您會將模型窗體作爲模型的一個實例,以便使用模型中的現有數據預填充窗體。那是你需要做的嗎?或者你不想這樣做,而是需要將當前用戶注入表單中? – Brandon

回答

9

若要從現有的模型實例與價值觀滋潤你的形式,你需要使用instance參數模型形式:

def update_profile(request, username): 
    profile = request.user.get_profile() 
    edit_profile_form = EditProfileForm(request.POST or None, 
     current_user=request.user, instance=profile) 

    if request.method == 'POST': 
     if edit_profile_form.is_valid(): 
      editprofile.save() 

    context = {'edit_profile_form': edit_profile_form} 
    return render(request, 'pandaboard/editprofile.html', context) 

注入電流request.user,您可以覆蓋的EditProfileForm__init__,在傳遞一個額外的關鍵字參數(或Arg,它其實並不重要),以及彈出出來的kwargs的超級調用之前,這樣你就沒有通過的ModelForm關鍵字參數是不期望:

class EditProfileForm(ModelForm): 
    class Meta: 
     model = Profile 

    def __init__(self, *args, **kwargs): 
     current_user = kwargs.pop('current_user') 
     super(EditProfileForm, self).__init__(*args, **kwargs) 
     self.fields['employer'] = current_user 

現在您不必通過commit=False並手動設置值employer在視圖中。

+0

我收到以下錯誤: 無法將關鍵字'user'解析爲字段。選擇是:company_description,company_name,company_website,contact_email,contact_name,僱主,id,jobpost我是否需要僱主字段實際上稱爲用戶? –

+0

您可以發表您的修改代碼的要點嗎? – Brandon

+0

https://github.com/realseanp/jobboard –