Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
217 views
in Technique[技术] by (71.8m points)

python - ManagementForm data is missing or has been tampered with

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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...