Django request.POST.get未保存到模型字段
我正在尝试保存request.POST字典中的数据。我想从request.POST获取'name'值,该值应与前缀相对应。然而,它不会发生,并且不会将任何内容保存到名称模型中。而且,我没有得到任何错误。你能告诉我怎么解决这个案子吗?多谢各位 视图.pyDjango request.POST.get未保存到模型字段,django,post,methods,modelform,Django,Post,Methods,Modelform,我正在尝试保存request.POST字典中的数据。我想从request.POST获取'name'值,该值应与前缀相对应。然而,它不会发生,并且不会将任何内容保存到名称模型中。而且,我没有得到任何错误。你能告诉我怎么解决这个案子吗?多谢各位 视图.py from django.shortcuts import render from .forms import modelformset_factory, AssumptionsForm from .models import Assumption
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
from django.core.exceptions import ValidationError
import pdb
model_names = ['A', 'B']
def get_assumptions(request):
AssumptionFormset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if request.method == 'POST':
formsets = [AssumptionFormset(request.POST, prefix=thing) for thing in model_names]
if all([formset.is_valid() for formset in formsets]):
for formset in formsets:
for form in formset:
form.save(commit=False)
form.Name = request.POST.get('name')
form.save()
else:
formsets = [AssumptionFormset(prefix=thing) for thing in model_names]
return render(request, 'assumptions.html', {'formsets': formsets})
from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions
class AssumptionsForm(ModelForm):
class Meta:
model = Assumptions
fields = '__all__'
exclude = ['Name']
from django.db import models
from django.forms import ModelForm
class Assumptions(models.Model):
Worst = models.FloatField(null=True, blank=True, default=None)
Base = models.FloatField(null=True, blank=True, default=None)
Best = models.FloatField(null=True, blank=True, default=None)
Name = models.TextField(null=True, blank=True, default=None)
假设.html
<div class="form">
<form action="" method="post">
{% for formset in formsets %}
{% csrf_token %}
{{ formset.management_form }}
{{ formset.non_form_errors.as_ul }}
<h1>{{formset.prefix}}</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="hidden" id={{formset.prefix}} name={{formset.prefix}} />
{% endfor %}
<input type="submit" value="Submit">
</form>
</div>
型号.py
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
from django.core.exceptions import ValidationError
import pdb
model_names = ['A', 'B']
def get_assumptions(request):
AssumptionFormset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if request.method == 'POST':
formsets = [AssumptionFormset(request.POST, prefix=thing) for thing in model_names]
if all([formset.is_valid() for formset in formsets]):
for formset in formsets:
for form in formset:
form.save(commit=False)
form.Name = request.POST.get('name')
form.save()
else:
formsets = [AssumptionFormset(prefix=thing) for thing in model_names]
return render(request, 'assumptions.html', {'formsets': formsets})
from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions
class AssumptionsForm(ModelForm):
class Meta:
model = Assumptions
fields = '__all__'
exclude = ['Name']
from django.db import models
from django.forms import ModelForm
class Assumptions(models.Model):
Worst = models.FloatField(null=True, blank=True, default=None)
Base = models.FloatField(null=True, blank=True, default=None)
Best = models.FloatField(null=True, blank=True, default=None)
Name = models.TextField(null=True, blank=True, default=None)
您还应该在HTML表单中传递
“name=name”
和“value={{{formset.prefix}}”
<input type="hidden" id={{formset.prefix}} name="name" value="{{formset.prefix}}" />
我明白了。原因是没有创建模型的实例。代码应如下所示:
for form in formset:
assumption_data = form.save(commit=False)
assumption_data.Name = request.POST['name']
assumption_data.save()
其中假设数据是假设模型的一个实例。感谢大家提供的见解。django post方法获取价值,您可以使用form.Name=request.post['Name']感谢您的见解。我也这么做了,但仍然没有保存到数据库,也没有生成错误。但是当我调试请求时,POST['name']包含'B'。不知道为什么它不保存到数据库中的名称字段。如有其他建议,将不胜感激。谢谢你的真知灼见。我这样做了,但仍然不会保存到数据库,也不会生成错误。然而,当我调试request.POST.get('name')时,它包含'B'。不知道为什么它不保存到数据库中的名称字段。如有其他建议,将不胜感激。谢谢。@Martin检查您是否有其他表单错误。是否保存了其他属性?基本、最差和最佳字段中的所有其他输入值都会保存,但此名称属性除外。