/ accounts / create /'dict_values'对象的TypeError不支持索引

时间:2018-08-20 13:02:37

标签: python django

嗨,我在向导中提交最终表单以保存到我的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'),

当我运行代码时,它会显示三种形式,但是当提交最后一种形式时,我会报错。

0 个答案:

没有答案