我想知道如何在我的form_valid()
函数中解决这个问题:
form_valid()缺少一个必需的位置参数:“form”
我正在使用Django Class Based View
和formsets
。但是,可以获得IntegrityError
,我添加了一个try/except
,以便在表单有效时保存表单集,并在遇到此问题时使用错误消息重定向模板。
class AnimalCreateView(CreateView):
model = Animal
template_name = 'animal_form.html'
def get_context_data(self, **kwargs):
context = super(AnimalCreateView, self).get_context_data(**kwargs)
foo_queryset = Foo.objects.all()
context['FooFormSets'] = FooFormSet(self.request.POST or None, self.request.FILES or None,
prefix='foo', queryset=foo_queryset)
return context
def form_valid(self, request, form):
context = self.get_context_data()
formsets = context['FooFormSets']
if form.is_valid():
self.object = form.save()
try:
if formsets.is_valid():
formsets.instance = self.object
formsets.save(commit=False)
for element in formsets:
element.save(commit=False)
formsets.save()
except IntegrityError:
messages.error(self.request, _(f"Issue with foo"))
return render(request, self.template_name)
return super(AnimalCreateView, self).form_valid(form)
我想知道在我的form_valid()
函数中我必须做些什么来解决我的问题,并且用错误信息在同一个模板表单上重定向用户。
谢谢
发布于 2018-11-22 02:57:22
def form_valid(self, request, form):
应该是def form_valid(self, form):
。
您可以通过self.request
访问请求对象。
def form_valid(self, form):
context = self.get_context_data()
formsets = context['FooFormSets']
if form.is_valid():
self.object = form.save()
try:
if formsets.is_valid():
formsets.instance = self.object
formsets.save(commit=False)
for element in formsets:
element.save(commit=False)
formsets.save()
except IntegrityError:
messages.error(self.request, _(f"Issue with foo"))
return render(self.request, self.template_name)
此外,您不需要第二次调用if form.is_valid():
,因为这已经确定了-因此执行form_valid
。
https://stackoverflow.com/questions/53429359
复制相似问题