Django: Как сохранить набор форм на основе двух моделей

У меня проблемы с сохранением набора форм в базу данных. У меня есть 2 модели, одна из которых имеет ForeignKey для другой (я сделал несколько записей для модели Balanta на странице администратора 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 на основе даты, которую я выбираю из раскрывающийся список (дата предварительно указана, но я также могу ввести ее вручную), а позже, в процессе разработки, я попытаюсь добавить jquery, чтобы добавить больше полей Conturi в форму, а после этого сохранить весь набор форм в базе данных, но это очень далеко от моей проблемы.

Большое спасибо!

5
задан misterManSam 4 August 2014 в 08:05
поделиться