我在找到答案时遇到了一些麻烦:
使用Django表单,提供当前/请求用户的正确方法是什么?
我的表单如下:
class NewProjectForm(forms.Form):
project_name = forms.CharField(max_length=100)
def save(self):
project = Project(name=self.cleaned_data[project_name])
project.status = 'Working'
#TODO project.created_by = ???
project.save()
return project
我是否需要将用户的第二个参数传递给save函数,然后从请求中获取或者?
答案 0 :(得分:3)
是的,你这样做。但是,您可以通过将表单转换为ModelForm
然后在视图中处理模型来节省一些时间:
class NewProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ['name',]
然后在你看来:
if form.is_valid():
new_project = form.save(commit=False)
new_project.created_by = request.user
new_project.save()
这样您就不必担心传递user
对象了,表单本身会为您设置其他属性(对于project.status
,您可以尝试{字段定义中的{1}}参数。)