【发布时间】:2019-06-06 15:55:07
【问题描述】:
假设我有如下表格:
class FormA(models.ModelForm):
...
class FormB(models.ModelForm):
....
class FormC(models.ModelForm):
.....
现在我想在基于类的视图中获取表单:
类 FormCreateView(CreateView): 模型 = 用户
def post(self, request, *args, **kwargs):
if self.request.user.user_level == 1:
get FormA
if self.request.user.user_level == 2:
get FormB
if self.request.user.user_level == 3:
get Formc
return reverse('xyz')
所以我这样做了。但是表单没有被提交,它给了我类型错误:
Exception Value:
is_valid() missing 1 required positional argument: 'self'
Exception Location:
/home/bishwa/PycharmProjects/sharefile/sharefile/users/views.py in post, line 64
类
class UserCreateView(CreateView):
model = User
# form_class = UserCreationForm
template_name = "users/create_user.html"
success_url= "/users/create"
def get_form_class(self):
if self.request.user.user_level == 1 or self.request.user.user_level == 10:
# form_class = UserCreationForm
return UserCreationForm
elif self.request.user.user_level == 20:
# form_class = UserCreationFormCompanyManager
return UserCreationFormCompanyManager
else:
# form_class = UserCreationFormHomeManager
return UserCreationFormHomeManager
def post(self, request, *args, **kwargs):
form = self.get_form_class()
user_level = User.objects.get(id=request.user.id)
# form = UserCreationFormHomeManager(request.POST)
# if request.method=='POST':
# form = UserCreationFormCompanyManager(request.POST)
if user_level == 20:
if form.is_valid():
obj = form.save(commit=False)
obj.company = self.request.user.company
# obj.password = make_password(form.cleaned_data['password'])
print(obj)
obj.save()
return obj
elif user_level == 30:
# if request.method=='POST':
# form = UserCreationFormHomeManager(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.company = self.request.user.company
obj.home = self.request.user.home
# obj.password = make_password(form.cleaned_data['password'])
print(obj)
obj.save()
return obj
else:
# if request.method=='POST':
# form = UserCreationFormHomeManager(request.POST)
if form.is_valid():
# obj.password = make_password(form.cleaned_data['password'])
print(obj)
obj = form.save()
return obj
return HttpResponseRedirect(reverse('users:create-user'))
我的form.py 中有这三种形式。当我尝试通过request.POST(即注释的那个)方法调用表单时,表单没有被保存。
【问题讨论】:
标签: python django django-forms django-views django-class-based-views