在保存其django ModelForm之前,将模型用户字段设置为当前登录用户

时间:2010-12-13 01:21:59

标签: django django-views django-forms

我的模型表格如下所示

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

owner字段是一个链接到Django User模型的foreignKey,它被排除在表单中呈现。 我想在保存表单之前将所有者字段设置为当前登录用户。 我的保存功能包含在以下代码中。


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方面保持联系,所以我将不胜感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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)