我正在尝试通过使用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 = ()