Modelformset_factory不保存到数据库

时间:2018-07-05 06:39:41

标签: python django factory modelform formset

我正在尝试通过使用modelformset_factory和 将它们保存到各自模型的数据库中。即使代码创建了 不同模型的格式不同,但不会将其保存到数据库。 建议如何做将不胜感激。谢谢。

views.py

from django.shortcuts import render
from .forms import  modelformset_factory, AssumptionsForm
from .models import Revenue_Assumptions, COGS_Assumptions, Assumptions

model_names = [Revenue_Assumptions, COGS_Assumptions]


def get_assumptions(request):

    AssumptionsFormSet_dict = {}

    for name in model_names:
        modelformset_ = modelformset_factory(name, form = AssumptionsForm, extra = 5)
        AssumptionsFormSet_dict[str(name)] = modelformset_

    if request.method == 'POST' and str(name) in request.POST:

        print('reached post')

        formset = AssumptionsFormSet_dict[str(name)]

        if formset.is_valid():

            print('valid form')
            print(str(name))

            for form in formset:

                print('in for loop after valid form1')

                name =  form.save()


    else:


        for key, value in AssumptionsFormSet_dict.items():  


            formset = AssumptionsFormSet_dict[key]

            print('reached else')




    return render(request, 'assumptions.html', {'formset': formset, 'model_names': model_names, 'name' : name})

assumptions.html

<div class="form">
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{{ formset.non_form_errors.as_ul }}
{% for name in model_names %}
<h1>{{name}}</h1>
<table id="formset" class="form">
{% for form in formset.forms %}
  {% if forloop.first %}
  <thead><tr>
    {% for field in form.visible_fields %}
    <th>{{ field.label|capfirst }}</th>
    {% endfor %}
  </tr></thead>
  {% endif %}
  <tr class="{% cycle 'row1' 'row2' %}">
  {% for field in form.visible_fields %}
    <td>
    {# Include the hidden fields in the form #}
    {% if forloop.first %}
      {% for hidden in form.hidden_fields %}
      {{ hidden }}
      {% endfor %}
    {% endif %}
      {{ field.errors.as_ul }}
      {{ field }}
    </td>
  {% endfor %}
  </tr>
{% endfor %}
</table>

<input type="submit", name={{name}}, value="save" />
{% endfor %}



</form>
</div>

models.py

from django.db import models
from django.forms import ModelForm

class Assumptions(models.Model):

    Worst_Case = models.FloatField(null=True, blank=True, default=None)
    Grey_Case = models.FloatField(null=True, blank=True, default=None)
    Red_Case = models.FloatField(null=True, blank=True, default=None)
    Blue_Case = models.FloatField(null=True, blank=True, default=None)
    Green_Case = models.FloatField(null=True, blank=True, default=None)
    Best_Case = models.FloatField(null=True, blank=True, default=None)

    class Meta:
        abstract = True

class Revenue_Assumptions(Assumptions):
    pass       


class COGS_Assumptions(Assumptions):
    pass

forms.py

from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions

class AssumptionsForm(ModelForm):

    class Meta:
        model = Assumptions
        fields = ['Worst_Case', 'Grey_Case', 'Red_Case', 'Blue_Case', 'Green_Case', 'Best_Case']
        exclude = ()

0 个答案:

没有答案