2013-05-30 6 views
0

긴 양식으로 인해 사용자가 1 단계와 2 단계를 수행 할 수 있도록 ModelForm 마법사를 만들었습니다. 구현 한 후에는 양식 데이터가 데이터베이스에 저장되지 않습니다. 내 코드는 다음과 같습니다.ModelForm 마법사가 데이터를 저장하지 않음

모델

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/') 

답변

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/') 
+0

그래서 이런 datas : 사용 = request.user, PUB_DATE datetime.datetime.now =()는 데이터 who_are_you = [ 'who_are_you를'] 배제되어야 하는가? – picomon

+0

@picomon, 업데이트 된 답변을 확인하십시오. 'form1' 또는'form2'로 시작하여 객체를 생성 한 다음 다른 양식의 속성을 설정할 수 있습니다. – Rohan

+0

감사! 그것은 효과가 있었지만 다음과 같이 설정해야합니다. form2 = form_list [1] fimp1.user = self.request.user # fimp1.pub_date = datetime.datetime.now() fimp1.address = form2.cleaned_data. ('주소') fimp1.city = form2.cleaned_data.get ('도시') fimp1.state = form2.cleaned_data.get ('상태') fimp1.email = form2.cleaned_data.get ('이메일') fimp1.phone_no = form2.cleaned_data.get ('phone_no') fimp1.details = form2.cleaned_data.get ('details') fimp1.price = form2.cleaned_data.get ('price') fimp1.save() – picomon

관련 문제