Я совсем новичок в Джанго.В настоящее время я использую ModelForm для сохранения пользовательских данных в модель.Тем не менее, я хотел бы сохранить данные в другие дочерние модели, которые наследуются от родительской модели.Однако мой код сохраняет данные в родительскую модель.Я предполагаю, что функция save () должна быть перезаписана для сохранения данных в дочернюю модель, но я понятия не имею, как это сделать.Кроме того, как мне масштабировать мой шаблон или forms.py, чтобы включить больше форм с разными именами кнопок отправки (или любой другой метод, чтобы отправленные формы можно было различить и соответственно заполнить базу данных)?Любые идеи высоко ценятся.Пожалуйста, найдите мой код ниже.
forms.py
from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions, Scenario1_Assumptions,
Scenario2_Assumptions, Scenario3_Assumptions, Scenario4_Assumptions ...
Scenario_N_Assumptions
class AssumptionsForm(ModelForm):
class Meta:
model = Assumptions
fields = ['Worst_Case', 'Grey_Case', 'Red_Case', 'Blue_Case',
'Green_Case', 'Best_Case']
exclude = ()
AssumptionsFormSet = modelformset_factory(Assumptions, form=AssumptionsForm,
extra = 5)
views.py
from django.shortcuts import render
from .forms import AssumptionsFormSet, modelformset_factory
from .models import Scenario1_Assumptions, Assumptions
def get_assumptions(request):
if request.method == 'POST':
formset = AssumptionsFormSet(request.POST)
if formset.is_valid():
if 'scenario1' in request.POST:
for form in formset:
Scenario1_Assumptions = form.save() #THIS DOESN'T WORK
if 'scenario2' in request.POST:
for form in formset:
Scenario2_Assumptions = form.save() #and so on...
else:
formset = AssumptionsFormSet()
return render(request, 'assumptions.html', {'formset': formset})
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 Scenario1_Assumptions(Assumptions):
pass
class Scenario2_Assumptions(Assumptions):
pass
class Scenario3_Assumptions(Assumptions):
pass
class Scenario4_Assumptions(Assumptions):
pass
.
.
.
class Scenario_N_Assumptions(Assumptions):
pass
Допущения.html
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{{ formset.non_form_errors.as_ul }}
<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 = "scenario1", value="Submit" />
</form>