Python Django modelformset_工厂未保存到数据库
问题在于,当将输入插入表单时,Django modelformset_工厂不会保存到数据库中。在提交表单以进行处理之后,似乎只有else语句到达。很明显,问题出在views.py中的part,如果请求中有“name”,那么就做某事。建议如何解决,我们将不胜感激。多谢各位 视图.pyPython Django modelformset_工厂未保存到数据库,python,django,database,modelform,Python,Django,Database,Modelform,问题在于,当将输入插入表单时,Django modelformset_工厂不会保存到数据库中。在提交表单以进行处理之后,似乎只有else语句到达。很明显,问题出在views.py中的part,如果请求中有“name”,那么就做某事。建议如何解决,我们将不胜感激。多谢各位 视图.py from django.shortcuts import render from .forms import modelformset_factory, AssumptionsForm from .models im
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
model_names = ['Form1', 'Form2']
def get_assumptions(request):
if request.method == 'POST' and 'name' in request.POST:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if formset.is_valid():
print('valid form')
for form in formset:
if form.is_valid():
print('in for loop after valid form1')
assumptions = form.save(commit='False')
assumptions.Name = 'name'
assumptions.save()
else:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
print('reached else')
return render(request, 'assumptions.html', {'formset': formset, 'model_names': model_names})
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)
Name = models.TextField(null=True, blank=True, default=None)
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 = ['Name']
型号.py
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
model_names = ['Form1', 'Form2']
def get_assumptions(request):
if request.method == 'POST' and 'name' in request.POST:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if formset.is_valid():
print('valid form')
for form in formset:
if form.is_valid():
print('in for loop after valid form1')
assumptions = form.save(commit='False')
assumptions.Name = 'name'
assumptions.save()
else:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
print('reached else')
return render(request, 'assumptions.html', {'formset': formset, 'model_names': model_names})
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)
Name = models.TextField(null=True, blank=True, default=None)
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 = ['Name']
forms.py
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
model_names = ['Form1', 'Form2']
def get_assumptions(request):
if request.method == 'POST' and 'name' in request.POST:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if formset.is_valid():
print('valid form')
for form in formset:
if form.is_valid():
print('in for loop after valid form1')
assumptions = form.save(commit='False')
assumptions.Name = 'name'
assumptions.save()
else:
formset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
print('reached else')
return render(request, 'assumptions.html', {'formset': formset, 'model_names': model_names})
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)
Name = models.TextField(null=True, blank=True, default=None)
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 = ['Name']
假设.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>
{%csrf_令牌%}
{{formset.management_form}
{{formset.non_form_errors.as_ul}
{模型_names%}中的名称为%
{{name}}
{formset.forms%%中表单的%
{%if-forloop.first%}
{%form.visible_fields%}
{{field.label | capfirst}}
{%endfor%}
{%endif%}
{%form.visible_fields%}
{#在#表单中包含隐藏字段}
{%if-forloop.first%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%endif%}
{{field.errors.as_ul}}
{{field}}
{%endfor%}
{%endfor%}
{%endfor%}
姓名
需要在您的请求中。POST
,
仔细检查模板并添加一个带有name='name'
<input name='name' />
但是您已经从表单字段中排除了名称
。所以POST数据从不包含name
。我不希望这个字段显示给用户。无论如何,我试着把它包括进去,但Sitl并没有保存到数据库中。我认为问题在于,if request.method=='POST'和'name'在request.POST:中永远不会满足,因为'name'在POST中永远不存在。想知道在这种情况下,传递信息和区分不同形式的正确方法是什么?