在保存django ModelForm之前,将models user字段设置为当前登录用户
我有一个模型表格如下在保存django ModelForm之前,将models user字段设置为当前登录用户,django,django-views,django-forms,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用户模型的foreignKey,它不在表单中呈现。 在保存表单之前,我试图将所有者字段设置为
class JobForm(ModelForm):
class Meta:
model = Job
exclude = ('date_added', 'date_modified','owner','status','tags','slug','winning_tech','completiondate')
owner字段是链接到Django用户模型的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方面联系了,因此我非常感谢您的帮助。因此回答了我自己的问题,使用commit=false并修改您想要的任何值。 本代码部分从前面的两个答案(wolPh和user***)中吸取了一些想法
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
def保存(self、user、commit=True、*args、**kwargs):
job=super(JobForm,self).save(commit=False,*args,**kwargs)
job.owner=用户
如果提交:
job.save()
返回工作
我总是覆盖
save()
方法并向其中添加用户
大概是这样的:
class JobForm(ModelForm):
def save(self, user, commit=True):
job = ModelForm.save(commit=False)
job.owner = user
if commit:
job.save()
return job
我在上面的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)
谢谢,这样更整洁,减少了视图函数中的混乱。我使用的是一个模型表单,所以我认为我不能直接访问所有者字段。“所有者”字段也从表单中排除。