ManagementForm 数据丢失或被篡改
Posted
技术标签:
【中文标题】ManagementForm 数据丢失或被篡改【英文标题】:ManagementForm data is missing or has been tampered with 【发布时间】:2014-10-09 11:44:18 【问题描述】:我正在尝试创建一个表单集来保存记录。但是,当我提交表单时,我不断收到错误消息。如果可能的话,请告诉我应该如何保存我的批次记录。
我的意见.py:
def weekly_progress(request):
ProgressFormSet = formset_factory(WeeklyProgressReportForm, extra=16)
formset = ProgressFormSet(request.POST or None)
if formset.is_valid():
for f in formset:
print(f)
return render(request, "progress/progressentry.html", 'formset' : formset)
我的表单.py
class WeeklyProgressReportForm(forms.ModelForm):
class Meta:
model = WeeklyProgressReport
fields = ('target_date', 'this_date', 'pkgno', 'slno', 'description', 'unit', 'receipt_this_week', 'issue_this_week', 'erection_this_week')
widgets =
'target_date': forms.DateInput(attrs='class': 'form-control', 'readonly': 'readonly'),
'this_date': forms.DateInput(attrs='class': 'form-control', 'readonly': 'readonly'),
'pkgno': forms.TextInput(attrs='class': 'form-control', 'readonly': 'readonly'),
'slno': forms.NumberInput(attrs='class': 'form-control', 'readonly': 'readonly'),
'description': forms.Textarea(attrs='class': 'form-control', 'rows': 1, 'readonly': 'readonly'),
'unit': forms.TextInput(attrs='class': 'form-control', 'readonly': 'readonly'),
'receipt_this_week': forms.NumberInput(attrs='class': 'form-control', 'step': 0.01),
'issue_this_week': forms.NumberInput(attrs='class': 'form-control', 'step': 0.01),
'erection_this_week': forms.NumberInput(attrs='class': 'form-control', 'step': 0.01, 'readonly': 'readonly'),
我的模板:
<form id="contractor-form" method="post" action="">
% csrf_token %
<!-- First Row -->
<div class="col-lg-6">
<div class="panel panel-primary">
<div class="panel-heading">Select Your Package</div>
<div class="panel-body">
<div class="col-lg-4">
<h4><label class="label label-primary">Package Number</label></h4>
</div>
<div class="col-lg-4">
<select id="pkgno-select" class="form-control">
<option value="12 (BRP)">12 (BRP)</option>
<option value="13 (BRP)">13 (BRP)</option>
<option value="13 (DHB)">13 (DHB)</option>
<option value="14 (DHB)">14 (DHB)</option>
</select>
</div>
<div class="col-lg-4">
<button type="button" id="date-edit" class="btn btn-warning">Edit Date</button>
</div>
</div>
</div>
</div>
<!-- Second Row -->
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading">Quantities</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>Target Date</th>
<th>This Date</th>
<th>Pkg Number</th>
<th>Sl Number</th>
<th>Description</th>
<th>Unit</th>
<th>Receipt This Week</th>
<th>Issue This Week</th>
<th>Erection This Week</th>
</tr>
</thead>
<tbody>
% for form in formset %
<tr>
<td> form.target_date </td>
<td> form.this_date </td>
<td> form.pkgno </td>
<td> form.slno </td>
<td> form.description </td>
<td> form.unit </td>
<td> form.receipt_this_week </td>
<td> form.issue_this_week </td>
<td> form.erection_this_week </td>
</tr>
% endfor %
</tbody>
</table>
</div>
</div>
</div>
<!-- Submit Button -->
<div class="well well-lg">
<button type="submit" class="btn btn-success btn-lg btn-block">Save</button>
</div>
</form>
我的模型.py
class WeeklyProgressReport(models.Model):
target_date = models.DateField()
this_date = models.DateField()
pkgno = models.CharField(max_length=10)
slno = models.IntegerField(max_length=2)
description = models.CharField(max_length=50)
unit = models.CharField(max_length=5)
target_quantity = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
receipt_previous = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
receipt_this_week = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
issue_previous = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
issue_this_week = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
erection_previous = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
erection_this_week = models.DecimalField(max_digits=12, decimal_places=2, blank=True, default=0)
def __unicode__(self):
return self.pkgno
【问题讨论】:
【参考方案1】:您必须在模板中呈现管理表单。 docs 解释原因和方式;一些选定的报价:
表单集使用此表单来管理表单集中包含的表单集合。如果您不提供此管理数据,则会引发异常[.]
管理表单可作为表单集本身的属性使用。在模板中渲染表单集时,您可以通过渲染
my_formset.management_form
(根据需要替换表单集的名称)来包含所有管理数据。
【讨论】:
thequickblog.com/…【参考方案2】:在你的% for form in formset %
上方写上 formset.management_form
喜欢这个
formset.management_form
% for form in formset %
【讨论】:
【参考方案3】:我在尝试在同一页面上使用两个表单集时遇到了同样的问题,我正在添加它的解决方案,因为我在其他任何地方都没有找到它。
确保将prefix
参数添加为
formset = ProgressFormSet(request.POST or None, prefix="fs1")
同时发送 GET 和 POST 请求。
【讨论】:
以上是关于ManagementForm 数据丢失或被篡改的主要内容,如果未能解决你的问题,请参考以下文章