我有困難的時候將表單保存到數據庫。我有2個型號,一個有一個ForeignKey其他(我做了一些條目在Django管理頁面巴蘭塔模型):Django:如何保存基於兩個模型的表單
models.py
class Balanta(models.Model):
data=models.DateField()
class Meta:
ordering=['data']
verbose_name_plural="Balante"
def __unicode__(self):
return unicode(self.data)
class Conturi(models.Model):
cont=models.PositiveIntegerField()
cont_debit=models.DecimalField(default=0, max_digits=30, decimal_places=2)
cont_credit=models.DecimalField(default=0, max_digits=30, decimal_places=2)
balanta=models.ForeignKey(Balanta)
class Meta:
#ordering=['cont']
verbose_name_plural="Conturi"
def __unicode__(self):
return unicode(self.cont)
接下來我犯了一個forms.py:
from sitfin.models import Conturi, Balanta
from django.forms import ModelForm
class BalantaForm(ModelForm):
class Meta:
model=Balanta
class ConturiForm(ModelForm):
class Meta:
model=Conturi
和views.py:
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from sitfin.models import Balanta, Conturi
from sitfin.forms import BalantaForm, ConturiForm
from django.forms.formsets import formset_factory
def conturi_index(request):
return render_to_response('sitfin/conturi_index.html',{'conturi_list':Conturi.objects.all()})
def conturi_introducere(request):
ConturiFormSet=formset_factory(ConturiForm)
if request.method=='POST':
#form=ConturiForm(data=request.POST)
conturi_formset=ConturiFormSet(request.POST, request.FILES)
#if form.is_valid():
if conturi_formset.is_valid():
for form in conturi_formset.cleaned_data:
balanta=Balanta(data=form['data'])
balanta.save()
cont=Conturi(cont=form['cont'])
cont.save()
return HttpResponseRedirect("sitfin/conturiok")
else:
#form=ConturiForm()
conturi_formset=ConturiFormSet()
#return render_to_response('sitfin/conturi_introducere.html',{'form':form})
return render_to_response('sitfin/conturi_introducere.html',{'conturi_formset':conturi_formset}, context_instance=RequestContext(request))
和模板:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Conturi_introducere</title>
</head>
<body>
<p>BAGA CONTURILE</p>
<form action="" method="post">{% csrf_token %}
{{ conturi_formset.management_form }}
<table border="0">
{% for cform in conturi_form %}
{{ cform }}
{% endfor %}
</table>
<p><input type="submit" value="Submit"></p>
</form>
</body>
</html>
我管理有一種形式,是與Conturi模型領域的表單集(與外鍵巴蘭塔模型)和巴蘭塔模型,但是當現場下方我按提交我得到KeyError的'數據'。這是這一步的錯誤,但我得到的錯誤,我設法克服像balanta_id不能爲空,或有關篡改management_form。
我想保存基於我從下拉選擇的日期Conturi formset(日期預填充,但我也可以手動輸入它)和後來在開發中我會嘗試添加一個jQuery在表單中添加更多的Conturi字段,然後將所有的表單集保存到數據庫中,但是它的waaaaaaay離我的問題太遠了。
非常感謝!
謝謝!所以我應該在兩個單獨的ifs中進行驗證? – Kaigara 2011-05-17 17:44:08
我做到了男人,你搖滾!根據您的答案,我設法將兩種表單/表單集的數據保存在數據庫中。^- ^ – Kaigara 2011-05-17 19:58:15