2010-12-13 23 views
0

之前,我有一個模型形式,所以下面設置一個模型用戶領域登錄用戶當前保存它的Django的ModelForm

class JobForm(ModelForm): 
    class Meta: 
     model = Job 
     exclude = ('date_added', 'date_modified','owner','status','tags','slug','winning_tech','completiondate') 

所有者字段是鏈接到Django的用戶模型中的外鍵,它的排除在表單中呈現。 我想在保存表單之前將所有者字段設置爲當前登錄用戶。 我的保存功能包含在下面的代碼中。

 

def createJob(request): 
    bix_user=getBixUser(request.user) 
    if request.method == 'POST': 
     form = JobForm(request.POST) 
     form.fields['owner']=bix_user 
     if form.is_valid(): 
     form.save() 

     return HttpResponseRedirect('/home') 
else: 
     .... 
 

我很確定我做錯了什麼。 我一直沒有與我的Django方面保持聯繫,所以我會很感激任何幫助。

回答

2

我始終覆蓋save()方法和用戶添加到它。

事情是這樣的:

class JobForm(ModelForm): 
    def save(self, user, commit=True): 
     job = ModelForm.save(commit=False) 
     job.owner = user 
     if commit: 
      job.save() 
     return job 
+0

謝謝,這是整潔,並且減少在我使用的是的ModelForm視圖功能 – osilocks 2010-12-14 07:36:39

0

所以回答我自己的問題,使用commit = false並修改任何你想要的值。 此代碼節的想法吸引了來自前兩個答案(wolPh和用戶***)


def save(self,user, commit=True, *args, **kwargs):

job = super(JobForm, self).save(commit=False,*args, **kwargs) job.owner = user if commit: job.save() return job

0

我使用上面的WoLph的變化:

def save(self, *args, **kwargs): 
    # add defaut owner field if not already stated 

    if 'owner' not in self.__dict__: 
     self.creator = system_user() 

    super(MyModel, self).save(*args, **kwargs) 
+0

雜亂,所以我不認爲我可以直接訪問所有者字段。所有者字段也被排除在表單之外。 – osilocks 2010-12-14 07:38:24

相關問題