2010-12-13 54 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