2016-04-18 54 views
1

我想解決一個小項目,新的Django。DB不更新與Django的形式

這裏是我的網址:

url(r'^createreceivable/$',views.createreceivables,name = 'createreceivable'), 

我views.py

@login_required 
def createreceivables(request): 
    if request.method == 'POST': 
     rec_form = Receivablesforms(data=request.POST) 
     if rec_form.is_valid(): 
      rec_form.save() 
      return render(request,'account/dashboard.html') 
    else: 
     rec_form = Receivablesforms() 

    return render(request,'account/addreceivable.html',{'rec_form':rec_form}) 

我model.py

class Receivables(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    receivable_name = models.CharField(max_length=250) 
    receivable_address = models.CharField(max_length=250,blank=True) 
    receivable_email = models.CharField(max_length=250,blank=True) 
    receivable_telephone = models.CharField(max_length=250,blank=True) 
    receivable_VAT = models.CharField(max_length=250,blank=True) 
    receivable_Service_Tax = models.CharField(max_length=250,blank=True) 
    receivable_PAN = models.CharField(max_length=250,blank=True) 

forms.py

class Receivablesforms(forms.ModelForm): 
    class Meta: 
     model = Receivables 
     exclude = ('user',) 

除了數據未保存在數據庫中之外,一切都很完美。請指導。

instance=request.user is not working 

模板是

<form action="." method="post"> 
{{ rec_form }} 
{% csrf_token %} 
<p><input type="submit" value="Save Changes"</p> 
</form> 
+0

我使用Mysql作爲數據庫。 –

+0

你使用表單的代碼是什麼? –

+0

@ShangWang更新了問題。 –

回答

2

既然你排除用戶,你需要把它找回來不知何故,否則你rec_form.save()因爲你的模型需要user領域需要填補會有例外。

訣竅是使用save(commit=False)。它會在內存中創建一個對象,但不會保存它。你只需要指定user到內存中的對象,並再次將其保存:

if rec_form.is_valid(): 
    new_rec = rec_form.save(commit=False) 
    new_rec.user = request.user 
    new_rec.save() 

檢查Django的文檔約commit=False in save() method

+0

其工作:)我如何感謝你! –