0

フォームが長いため、ModelForm ウィザードを作成して、ユーザーが手順 1 と 2 を実行できるようにしました。実装後、フォーム データがデータベースに保存されません。以下は私のコードです。

モデル

class FimpForm1(ModelForm):
    class Meta:
        model=Fimp
        fields=('who_are_you','name','main_view','side_view','other_1_view','other_2_view','other_3_view','other_4_view','other_5_view','other_6_view','other_7_view','other_8_view')



class FimpForm2(forms.ModelForm):
     details=forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
    class Meta:
       model=Fimp
       fields=('address','city','state','email','phone_no','details','price')
       exclude=('user','pub_date','slug')

Views.py

class FimpWizard(SessionWizardView):
    file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'photos'))
    def done(self, form_list, **kwargs):
        form=FimpForm1 and FimpForm2(self.request.POST,self.request.FILES)
        if form.is_valid():
            data=form.cleaned_data
            newfimp=Fimp(
                user=request.user,
                pub_date=datetime.datetime.now(),
                who_are_you=data['who_are_you'],
                name=data['name'],
                main_view=request.FILES.get('main_view'),
                side_view=request.FILES.get('side_view'),
                other_1_view=request.FILES.get('other_1_view'),
                other_2_view=request.FILES.get('other_2_view'),
                other_3_view=request.FILES.get('other_3_view'),
                other_4_view=request.FILES.get('other_4_view'),
                other_5_view=request.FILES.get('other_5_view'),
                other_6_view=request.FILES.get('other_6_view'),
                other_7_view=request.FILES.get('other_7_view'),
                other_8_view=request.FILES.get('other_8_view'),
                address=data['address'],
                city=data['city'],
                state=data['state'],
                email=data['email'],
                phone_no=data['phone_no'],
                details=data['details'],
                price=data['price'])
           newfimp.save()
       return HttpResponseRedirect('/view_list/')
4

1 に答える 1

0

あなたのdone()方法は正しくありません。メソッドが呼び出されると、done()django は既にデータを検証しているので、フォームを保存するだけです。

例えば

def done(self, form_list, **kwargs):

    #you can access form as
    form1 = form_list[0]
    obj1 = form1.save(commit=False)

    #now set fields from 2nd form
    form2 = form_list[1]
    obj1.user = self.request.user
    obj1.address = form2.cleaned_data['address']
    ...

    obj1.save()

    return HttpResponseRedirect('/view_list/')
于 2013-05-30T10:14:37.180 に答える