2013-04-23 86 views
1

任何人都可以幫助我這個。這個代碼有什麼問題,因爲只保存一個表單,那就是表單,但是bform不會被保存。我哪裏做錯了??django:兩種形式,但只有一種形式是節省

views.py

def customerView(request, **kwargs): 
    this_customer = customer.objects.get(id=kwargs['pk']) 
    if request.method == 'POST': 
     form = customerForm(request.POST, instance=this_customer) 
     bform = buildingForm(request.POST) 
     if form.is_valid() and bform.is_valid(): 
      form.save() 
      bform.save() 
    else: 
     form = customerForm(instance=this_customer) 
     bform = buildingForm() 
    return render_to_response('customer.html',{'form':form, 'bform':bform,}, 
           context_instance = RequestContext(request)) 

forms.py

class customerForm(ModelForm): 
    F_NAME = forms.CharField(widget=forms.TextInput(attrs={'size':'34'})) 
    L_NAME = forms.CharField(widget=forms.TextInput(attrs={'size':'34'})) 
    EMAIL = forms.CharField(widget=forms.TextInput(attrs={'size':'19'})) 
    ADD = forms.CharField(widget=forms.TextInput(attrs={'size':'34'})) 
    class Meta: 
     model = customer 

class buildingForm(ModelForm): 
    CUSTOMER  = forms.CharField(widget=forms.TextInput(attrs={'size':'20'})) 
    B_FLOORSPACE = forms.CharField(widget=forms.TextInput(attrs={'size':'4'})) 
    B_YEAR  = forms.CharField(widget=forms.TextInput(attrs={'size':'4'})) 
    class Meta: 
     model = building 
     widgets = {'B_USE'  : RadioSelectNotNull(), 
        'B_TYPE'  : RadioSelectNotNull(), 
        } 

編輯補充模板customer.html

<form action="" method="post"> 
<button type="submit" name="customer">Save</button> 
    {% csrf_token %} 
    {{ form.id }} 

...more code... 
<table> 
    <tr><td><div>First Name</div>{{ form.F_NAME }}</td></tr>  
    <tr><td><div>Last Name</div>{{ form.L_NAME }}</td></tr> 
</table> 

    ...more code.... 
<table> 
    <tr><td><div>Build Use</div></td><td>{{ bform.B_USE }}</td> 
     <td><div>Build Space</div></td><td>{{ bform.B_FLOORSPACE }}</td> 
     </tr> 

...more code... 
</form> 

沒有錯誤,指出存在錯誤編碼。 謝謝你的幫助。

+0

你可以發佈你正在渲染表單的模板部分嗎? – 2013-04-23 15:07:08

+0

您是否曾嘗試在'buildingForm'的'Meta'類中添加一個'fields'行,並在use/type的'widgets'選項中指定客戶/ floorspace/year小部件,而不是在字段構造函數中? – Mariano 2013-04-23 17:19:42

+0

可能需要爲這兩種表單使用[前綴](https://docs.djangoproject.com/zh/dev/ref/forms/api/#django.forms.Form.prefix)。您需要在呈現空白表單時以及在從POST數據構建綁定表單時添加它。 – akotian 2013-04-23 19:16:46

回答

-1

我假設您在模板中以單獨的表單元素顯示兩個表單。這種方法的問題是,你實際上只能一次提交一個表單。幸運的是,Django提供了Formset作爲解決方案。

相應的文檔:https://docs.djangoproject.com/en/dev/topics/forms/formsets/

+2

不需要formset,只需將兩個Django表單包裝在一個HTML

元素中。 – 2013-04-23 15:14:30

+0

你是對的,我在這一個抽籤上有點快。 Formsets在這裏不是正確的解決方案。 – 2013-04-23 15:18:59

+0

你好@DanielRoseman和j。科赫我的形式是包裝在一個單一的HTML表格,但爲什麼它仍然沒有保存。在views.py??中的編碼是否有錯誤?雖然沒有給我任何錯誤,但... – noobes 2013-04-24 07:57:12