Veritabanına bir form kümesi kaydetmede zor zamanlar yaşıyorum.Django: İki modele dayalı bir form kümesi nasıl kaydedilir
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)
sonraki i forms.py yapılan
models.py: Diğer bir ForeignKey sahip (Django yönetici sayfasında Balanta modeli için bazı girişleri yapılmış) bir 2 model var:
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
ve 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))
ve şablon:
I (Balanta modeline yabancı anahtarla) Conturi modelinde alanları ile bir formset bir form var yönetmek<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>
ve Balanta modelinde ama alanının altında Gönder tuşuna basarken KeyError 'data' alırım. Bu, bu adımdaki hatadır, ancak balanta_id gibi üstesinden gelmeyi başaramadığım hatalar, null olamayacağı veya management_form ile kurcalamayacağınız bir şeyle karşılaştığım hatalar oluyor.
Conturi form setini, açılır listeden seçtiğim tarihe göre kaydetmek istiyorum (tarih önceden doldurulmuş, ancak el ile de girebiliyorum) ve daha sonra geliştirmeye bir jquery eklemeye çalışacağım Formda daha fazla Conturi alanı eklemek ve daha sonra veritabanındaki tüm formları kaydetmek için ama waaaaaaay sorunumdan çok uzak.
Çok teşekkür ederim!
Teşekkürler! Yani doğrulama işlemini 2 ayrı ifşa yapmalı mıyım? – Kaigara
Ben yaptım adam, sen salla! Veritabanındaki her iki form/form kümesi için verileri yanıtınıza göre kaydetmeyi başarabilirim.^- ^ – Kaigara