简体   繁体   中英

Django - Model field to be the sum of other fields

I am trying to make one field on my model (quantidadeImprimir) to be the sum of some other fields on the same model, which are going to be collected through a form. I am trying to use property with a method, but when i try to submit the form i get the error: "Field 'quantidadeImprimir' doesn't have a default value". What am i doing wrong? Here's my code:

Model:

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))

Template:

<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>

That's because in your model you set quantidadeImprimir to be mandatory. When you then try to save it from your form you get that error.

Also having each size as a field in your model is a bad idea. It's better to represent that through a one-to-many relation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM