Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ManagementForm data is missing or has been tampered with

Tags:

I am trying to create a formset to save records in a go. But, I keep getting the error when I submit my form. And if possible please as tell me how should I save my batch of records.

My views.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}) 

My forms.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'}),        } 

My template:

<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> 

My models.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 
like image 383
user2401997 Avatar asked Aug 15 '14 17:08

user2401997


1 Answers

You have to render the management form in your template. The docs explain why and how; some selected quotes:

This form is used by the formset to manage the collection of forms contained in the formset. If you don’t provide this management data, an exception will be raised[.]

The management form is available as an attribute of the formset itself. When rendering a formset in a template, you can include all the management data by rendering {{ my_formset.management_form }} (substituting the name of your formset as appropriate).

like image 103
Peter DeGlopper Avatar answered Oct 29 '22 02:10

Peter DeGlopper