Python 使用django-tables2表单将所选内容发送到另一个表单-不保存任何内容?
我有一个django-tables2表单,它将选定的模型项传递给第二个表单。第二个表单的目标是允许用户编辑将应用于所有项的值。我的问题是,第二个表单验证失败,然后输入值无法保存。在表单尝试验证之前,如何链接这两个表单并允许用户输入?POST请求似乎是从表中经过第二个表单的——有没有办法中断它或启动第二个请求 image_list.html: 当我在表格视图中单击“编辑风扇”按钮时,Python 使用django-tables2表单将所选内容发送到另一个表单-不保存任何内容?,python,django,django-forms,django-tables2,Python,Django,Django Forms,Django Tables2,我有一个django-tables2表单,它将选定的模型项传递给第二个表单。第二个表单的目标是允许用户编辑将应用于所有项的值。我的问题是,第二个表单验证失败,然后输入值无法保存。在表单尝试验证之前,如何链接这两个表单并允许用户输入?POST请求似乎是从表中经过第二个表单的——有没有办法中断它或启动第二个请求 image_list.html: 当我在表格视图中单击“编辑风扇”按钮时,EditFANForm正确呈现,我可以输入值,重定向回表格视图,但没有保存任何值。从我添加的用于跟踪代码的print
EditFANForm
正确呈现,我可以输入值,重定向回表格视图,但没有保存任何值。从我添加的用于跟踪代码的print
命令中,我在console中获得以下内容:
POST
774
ERRORS: <bound method BaseForm.non_field_errors of <EditFANForm bound=False, valid=False, fields=(FAN;collection;tags)>>
POST
774
错误:
其中“774”是所选对象。因此,在我看来,表单进入了可以编辑值的部分(
EditFANForm
),但表单在用户可以输入值之前发布,因此表单不会验证(但也没有任何错误?)
我哪里做错了?如何保存第二个表单中的值
Python3.6.8、Django 2.2.6我想出了一个似乎效果不错的解决方案:添加重定向到另一个视图以处理第二个表单。来自
django.contrib
的消息用于将上下文数据传递给第二个视图和表单(在本例中为表中选定的对象)
def delete_image_list(request):
if request.method == 'POST':
if 'delete_images' in request.POST:
pks = request.POST.getlist('selection')
# Delete items...
elif 'edit_FAN' in request.POST:
form = EditFANForm()
pks = request.POST.getlist('selection')
imgs = []
for pk in pks:
ex = exif.objects.get(pk=pk)
imgs.append(ex.image_id)
if request.method == 'POST':
print('POST')
for img in imgs:
print(image.objects.get(pk=img))
form = EditFANForm(instance=image.objects.get(pk=img))
if form.is_valid():
print('Valid')
formS = form.save(commit=False)
img.FAN = formS.FAN
fromS.save()
else:
print('ERRORS: ', form.errors)
return render(request, 'ExifReader/edit_fan_form.html', {'form': form, 'pks':pks})
POST
774
ERRORS: <bound method BaseForm.non_field_errors of <EditFANForm bound=False, valid=False, fields=(FAN;collection;tags)>>
from django.contrib import messages
def delete_image_list(request):
...
elif 'edit_FAN' in request.POST:
pks = request.POST.getlist('selection')
messages.add_message(request, messages.INFO, pks)
return HttpResonseRedirect(reverse('ExifReader:images_list_edit'))
def images_list_edit(request):
if request.method == 'POST':
...