2014-11-01 37 views
1

我的觀點:Django的ManagementForm數據丟失或已被篡改

class HospitalDoctorAddView(CreateView): 

template_name = "hospital_doctor_add.html" 
form_class = HospitalDoctorInfoForm 
model = HospitalDoctor 
success_url = "/hospital-profile/" 

def get_context_data(self, **kwargs): 
    context = super(HospitalDoctorAddView, self).get_context_data(**kwargs) 
    context['formset'] = TimingFormSet 
    return context 

def post(self, request, *args, **kwargs): 

    form = self.form_class(request.POST) 
    formset = TimingFormSet(request.POST, prefix='timing') 
    if form.is_valid() and formset.is_valid(): 
     self.form_save(form) 
     self.formset_save(formset) 

    return render(request, self.template_name, { 
    'form': HospitalDoctorInfoForm, 
    'formset': formset}) 

def form_save(self, form): 
    info = HospitalDoctor() 
    info.hospital = self.request.user 
    info.full_name = form.cleaned_data['full_name'] 
    info.expertization = form.cleaned_data['expertization'] 
    info.nmc_no = form.cleaned_data['nmc_no'] 
    info.save() 

def formset_save(self, form): 
    frm = Timing() 
    frm.day = form.cleaned_data['day'] 
    frm.mng_start = form.cleaned_data['mng_start'] 
    frm.mng_end = form.cleaned_data['mng_end'] 
    frm.eve_start = form.cleaned_data['eve_start'] 
    frm.eve_end = form.cleaned_data['eve_end'] 
    frm.save() 

,在我的模板:

<form method="post" action="">{% csrf_token %} 
<p>{{form}}</p> 
<p>{{formset.management_form}}</p> 
<table> 
    {% for form in formset %} 
    {{form}} 
    {% endfor %} 
</table> 
<input type="submit" value="Create" /> 

</form> 

我要發佈一個正規形式和表單集。

這裏我得到ValidationError:u'ManagementForm數據丟失或被篡改'。我不知道什麼是錯的。需要幫忙。

+0

你可以發佈一些更多的視圖類嗎?如果您的視圖只是一個函數,那麼它不會有自己訪問的屬性/方法 – rfj001 2014-11-01 05:54:57

+0

我正在使用createview,並且如果form.is_valid()和formset.is_valid()顯示錯誤 – gamer 2014-11-01 06:02:26

+0

我已添加我的視圖 – gamer 2014-11-01 06:09:33

回答

0

試試這個,看看會發生什麼:

def get_context_data(self, **kwargs): 
    context = super(HospitalDoctorAddView, self).get_context_data(**kwargs) 
    if self.request.POST 
     context['formset'] = TimingFormSet(self.request.POST, prefix='timing') 
    return context 

def post(self, request, *args, **kwargs): 

    form = self.get_form(self.get_form_class()) 
    formset = TimingFormSet(request.POST, prefix='timing') 
    if form.is_valid() and formset.is_valid(): 
     self.form_save(form) 
     self.formset_save(formset) 

    print(self.get_context_data(**kwargs)) # See what is being passed in the context 
    return render(request, self.template_name, self.get_context_data(**kwargs)) 

你想要的CBV的完整的上下文傳遞給模板,而在此之前你只是路過類形式的名稱。

+0

它沒有顯示錶單集的形式。 – gamer 2014-11-01 06:23:44

+0

嘗試將模板從「{{form}}」更改爲「{{form.as_p}}」同樣在post方法中打印出上下文以查看上下文中的內容。 – rfj001 2014-11-01 06:29:12

+0

它不打印任何哥們.... – gamer 2014-11-01 08:44:34

相關問題