嗨,我在向导中提交最终表单以保存到我的models.py时遇到上述错误。请在下面查看我的代码。我们非常感谢您为解决此问题提供的任何帮助。
models.py
class Item(models.Model):
user=models.ForeignKey(User,
on_delete=models.DO_NOTHING)
price=models.DecimalField(max_digits=8,decimal_places=2)
image=models.ImageField(upload_to="assets/",blank=True,storage=img)
description=models.TextField(blank=True)
def __unicode__(self):
return '%s-%s' %(self.user.username, self.price)
forms.py
class FirstForm(forms.Form):
id = forms.IntegerField(widget=forms.HiddenInput, required=False)
price = forms.DecimalField(max_digits=8, decimal_places=2)
#add all the fields that you want to include in the form
class SecondForm(forms.Form):
image = forms.ImageField(required=False)
class ThirdForm(forms.Form):
description = forms.CharField(widget=forms.Textarea)
views.py
class MyWizard(SessionWizardView):
template_name = "registration/wizard_form.html"
file_storage = models.img
#if you are uploading files you need to set FileSystemStorage
def done(self, form_list, **kwargs):
for form in form_list:
print(form.initial)
if not self.request.user.is_authenticated:
raise Http404
id = form_list[0].cleaned_data['id']
try:
item = Item.objects.get(pk=id)
###################### SAVING ITEM #######################
item.save()
print(item)
instance = item
except:
item = None
instance = None
if item and item.user != self.request.user:
print("about to raise 404")
raise Http404
if not item:
instance = Item()
for form in form_list:
for field, value in form.cleaned_data.iteritems():
setattr(instance, field, value)
instance.user = self.request.user
instance.save()
return render_to_response('wizard-done.html',{ 'form_data':
[form.cleaned_data for form in form_list], })
def edit_wizard(request, id):
#get the object
item = get_object_or_404(Item, pk=id)
#make sure the item belongs to the user
if item.user != request.user:
raise HttpResponseForbidden()
else:
#get the initial data to include in the form
initial = {'0': {'id': item.id,
'price': item.price,
#make sure you list every field from your form
definition here to include it later in the initial_dict
},
'1': {'image': item.image,
},
'2': {'description': item.description,
},
}
print(initial)
form = MyWizard.as_view([FirstForm, SecondForm, ThirdForm],
initial_dict=initial)
return form(context=RequestContext(request), request=request)
urls.py
url(r'^create/$',views.MyWizard.as_view([FirstForm, SecondForm, ThirdForm]), name='wizards'),
当我运行代码时,它会显示三种形式,但是当提交最后一种形式时,我会报错。