Django - 模型字段是其他字段的总和

时间:2013-08-12 23:21:37

标签: python django model

我试图让我的模型上的一个字段(quantidadeImprimir)成为同一模型上其他一些字段的总和,这些字段将通过表单收集。我试图使用属性与方法,但当我尝试提交表单时,我得到错误:“字段'quantdadeImprimir'没有默认值”。我究竟做错了什么?这是我的代码:

型号:

quantidade_PMasc = models.IntegerField()
quantidade_MMasc = models.IntegerField()
quantidade_GMasc = models.IntegerField()
quantidade_GGMasc = models.IntegerField()
quantidade_XGGMasc = models.IntegerField()
quantidade_PFem = models.IntegerField()
quantidade_MFem = models.IntegerField()
quantidade_GFem = models.IntegerField()
quantidade_GGFem = models.IntegerField()
quantidade_02Inf = models.IntegerField()
quantidade_04Inf = models.IntegerField()
quantidade_06Inf = models.IntegerField()
quantidade_08Inf = models.IntegerField()
quantidade_10Inf = models.IntegerField()
quantidade_12Inf = models.IntegerField()
quantidade_14Inf = models.IntegerField()    

def _quantidade_imprimir(self):
    "Retorna a quantidade de estampas a ser impressa para esta camisa neste evento"
    return (self.quantidade_PMasc + self.quantidade_MMasc + self.quantidade_GMasc
            + self.quantidade_GGMasc + self.quantidadeXGGMasc + self.quantidade_PFem
            + self.quantidade_MFem + self.quantidade_GFem + self.quantidade_GGFem +
            self.quantidade_02Inf + self.quantidade_04Inf + self.quantidade_06Inf +
            self.quantidade_08Inf + self.quantidade_10Inf + self.quantidade_12Inf +
            self.quantidade_14Inf)

quantidadeImprimir = property(_quantidade_imprimir)

view.py:

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.template import Context, loader
from django.forms.models import modelform_factory
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.forms import ModelForm
from eventos.models import CamisaEvento
from eventos.models import CamisaEventoForm

def index(request):
    camisas_evento = CamisaEvento.objects.all()

    if request.method == 'POST':
        form = CamisaEventoForm(request.POST)
        if form.is_valid():
            try:                
                camisa_levar_evento = CamisaEvento.objects.get(estampa=form.cleaned_data.get('estampa'), cor=form.cleaned_data.get('cor'))
                quantidade_PMasc = form.cleaned_data.get('quantidade_PMasc')
                quantidade_MMasc = form.cleaned_data.get('quantidade_MMasc')
                quantidade_GMasc = form.cleaned_data.get('quantidade_GMasc')
                quantidade_GGMasc = form.cleaned_data.get('quantidade_GGMasc')
                quantidade_XGGMasc = form.cleaned_data.get('quantidade_XGGMasc')
                quantidade_PFem= form.cleaned_data.get('quantidade_PFem')
                quantidade_MFem= form.cleaned_data.get('quantidade_MFem')
                quantidade_GFem= form.cleaned_data.get('quantidade_GFem')
                quantidade_GGFem= form.cleaned_data.get('quantidade_GGFem')
                quantidade_02Inf = form.cleaned_data.get('quantidade_02Inf')
                quantidade_04Inf = form.cleaned_data.get('quantidade_04Inf')
                quantidade_06Inf = form.cleaned_data.get('quantidade_06Inf')
                quantidade_08Inf = form.cleaned_data.get('quantidade_08Inf')
                quantidade_10Inf = form.cleaned_data.get('quantidade_10Inf')
                quantidade_12Inf = form.cleaned_data.get('quantidade_12Inf')
                quantidade_14Inf = form.cleaned_data.get('quantidade_14Inf')
                camisa_levar_evento.quantidade_PMasc = quantidade_PMasc
                camisa_levar_evento.quantidade_MMasc = quantidade_MMasc
                camisa_levar_evento.quantidade_GMasc = quantidade_GMasc
                camisa_levar_evento.quantidade_GGMasc = quantidade_GGMasc
                camisa_levar_evento.quantidade_XGGMasc = quantidade_XGGMasc
                camisa_levar_evento.quantidade_PFem = quantidade_PFem
                camisa_levar_evento.quantidade_MFem = quantidade_MFem
                camisa_levar_evento.quantidade_GFem = quantidade_GFem
                camisa_levar_evento.quantidade_GGFem = quantidade_GGFem
                camisa_levar_evento.quantidade_02Inf = quantidade_02Inf
                camisa_levar_evento.quantidade_04Inf = quantidade_04Inf
                camisa_levar_evento.quantidade_06Inf = quantidade_06Inf
                camisa_levar_evento.quantidade_08Inf = quantidade_08Inf
                camisa_levar_evento.quantidade_10Inf = quantidade_10Inf
                camisa_levar_evento.quantidade_12Inf = quantidade_12Inf
                camisa_levar_evento.quantidade_14Inf = quantidade_14Inf                
                camisa_levar_evento.save()
            except CamisaEvento.DoesNotExist:
                camisa_levar_evento = form.save()
            return HttpResponseRedirect('')
    else:
        form = CamisaEventoForm()
        return render_to_response('eventos/index.html', { 'form': form, 'camisas_evento': camisas_evento,}
                                  , context_instance=RequestContext(request))

模板:

<form method="post" action="">
    {% csrf_token %}            
    <!-- {{ form.as_table }} -->
    <table class="form_eventos">
        <tr>
            <td>Estampa: {{ form.estampa }}</td>
            <td>Cor: {{ form.cor }}</td>
        </tr>
        <tr>
            <td class="subtitulo-form">Masculinas</td>
        </tr>
        <tr>
            <td>Quantidade P Masc.: {{ form.quantidade_PMasc }}</td>
            <td>Quantidade M Masc.: {{ form.quantidade_MMasc }}</td>
            <td>Quantidade G Masc.: {{ form.quantidade_GMasc }}</td>
        </tr>
        <tr>
            <td>Quantidade GG Masc.: {{ form.quantidade_GGMasc }}</td>
            <td>Quantidade XGG Masc.: {{ form.quantidade_XGGMasc }}</td>                    
        </tr>
        <tr>
            <td class="subtitulo-form">Femininas</td>
        </tr>
        <tr>
            <td>Quantidade P Fem.: {{ form.quantidade_PFem }}</td>
            <td>Quantidade M Fem.: {{ form.quantidade_MFem }}</td>
            <td>Quantidade G Fem.: {{ form.quantidade_GFem }}</td>
        </tr>
        <tr>
            <td>Quantidade GG Masc.: {{ form.quantidade_GGFem }}</td>                    
        </tr>
        <tr>
            <td class="subtitulo-form">Infantis</td>
        </tr>
        <tr>
            <td>Quantidade 2 Anos: {{ form.quantidade_02Inf }}</td>
            <td>Quantidade 4 Anos: {{ form.quantidade_04Inf }}</td>
            <td>Quantidade 6 Anos: {{ form.quantidade_06Inf }}</td>
        </tr>
        <tr>
            <td>Quantidade 8 Anos: {{ form.quantidade_08Inf }}</td>
            <td>Quantidade 10 Anos: {{ form.quantidade_10Inf }}</td>
            <td>Quantidade 12 Anos: {{ form.quantidade_12Inf }}</td>
        </tr>
        <tr>
            <td>Quantidade 14 Anos: {{ form.quantidade_14Inf }}</td>
        </tr>                
    </table>
    <br /><input class="button" type="submit" value="Incluir Estampa" />
</form>

1 个答案:

答案 0 :(得分:0)

这是因为在您的模型中,您将quantidadeImprimir设置为必填项。当您尝试从表单中保存它时,您会收到该错误。

将每个尺寸作为模型中的字段也是一个坏主意。通过一对多关系来表示这一点会更好。

相关问题