Django масштабирование и сохранение форм с наследованием - PullRequest
0 голосов
/ 08 июня 2018

Я совсем новичок в Джанго.В настоящее время я использую 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...