0

我很難將表單保存到數據庫中。每次點擊保存它都不會保存在db/admin中。似乎無法弄清楚。我希望有人能幫助我。django:當在一個模板中使用兩個模型和兩個表單時,數據不會保存在數據庫中

此項目是爲了收集新客戶對公司信息化建設;如果客戶在數據庫中存在,那麼它會查看特定客戶的細節,並在需要的時候能夠編輯特定客戶,並能保存時覆蓋數據。該信息從客戶模型和建築模型以及customerForm和buildingForm收集並顯示在客戶模板中。

models.py

class customer(models.Model) 
    F_NAME = models.CharField(max_length = 50) 
    L_NAME = models.CharField(max_length = 50) 
    ADD  = models.CharField(max_length = 60, blank =True) 
    EMAIL = models.EmailField() 
    def __unicode__(self): 
     return '%s' % (self.F_NAME) 

class building(models.Model): 
    CUSTOMER  = models.ForeignKey(customer) 
    B_USE   = models.CharField(max_length = 2, blank = True, choices = c.Use) 
    B_FLOORSPACE = models.IntegerField(default=0) 
    B_YEAR  = models.IntegerField(null = True, blank = True) 
    B_TYPE  = models.CharField(max_length = 2, blank = True, choices = c.Type) 
    def __unicode__(self): 
     return '%s' % (self.B_USE) 

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 
     exclude = ('CUSTOMER',) 
     widgets = {'B_USE'  : RadioSelectNotNull(), 
        'B_TYPE'  : RadioSelectNotNull(), 
        } 

views.py

def customerView(request ,**kwargs): 
    context ={} 
    try: 
     this_customer = customer.objects.get(id = kwargs ['pk']) 
    except: 
     this_customer = customer.objects.create(id = kwargs['pk']) 
    try: 
     bform = buildingForm(instance=building()) 
     context['build']=True 
     context['bform']=bform 
    except: 
     context['build']=False 
    form = customerForm(instance=this_customer) 
    context['form']= form 

    if request.method == 'POST': 
     form = customerForm(request.POST, instance = customer()) 
     bform = [buildingForm(request.POST, prefix = str(x), instance = building()) for x in range (0,3)] 
     if form.is_valid() and all ([bf.is_valid() for bf in bform]): 
      new_customer = form.save() 
      for bf in bform: 
       new_build = bf.save(commit = False) 
       new_build.CUSTOMER = new_customer 
       new_build.save() 
      return HttpResponseRedirect('customer.html') 
    else: 
     form = customerForm(instance=customer()) 
     bform = [buildingForm(prefix=str(x), instance=building())for x in range(0,3)] 

    return render_to_response('customer.html',{'customer_form':form, 'build_form':bform}, context_instance = RequestContext(request)) 

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.... 

{% if build %} 

...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> 

我嘗試在單一的形式在多個型號進入這個演示 http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/Django: multiple models in one template using formsHow to use two different Django Form at the same template? ,但不能看到那裏的錯誤是。我的任務現在非常簡單,我只需保存所有已輸入並保存在數據庫中的信息。

回答

0

您可能在某處出現驗證錯誤。由於您沒有在模板中顯示任何表單錯誤,因此您的表單只會在沒有解釋的情況下重新顯示。

+0

答覆。我想你是對的。這是我的問題,我看不到任何錯誤,我不知道從哪裏開始測試。當我點擊保存在HTML上它似乎像刷新,但當我檢查數據庫/管理沒有發生......但是當我從管理員輸入,然後我可以把數據出我的HTML ... :(你能幫我要檢查或查看什麼?謝謝你 – noobes

相關問題