Django:多行表单未保存到数据库中

时间:2017-07-12 15:02:44

标签: html django datatables

我已经阅读了django文档和所有类似的问题,但我似乎无法弄明白。

我有一个表格,以表格的形式(使用数据表格)为多个学生提供多项考试的分数。

我基本上需要的是显示一个表格,该表格显示当前存在于数据库中的值,但也允许编辑和保存。此外,虽然显示了整个表格,但它应该只允许编辑一些表格单元格。

在表格中,学生们#滚动号码来自数据库,但它们不会改变,因此我不会将它们传递给表格。问题是即使没有任何错误,form.is_valid()会返回true,但form.save()不会将值保存到数据库。

我怀疑它可能不知道与它收到的数据行有关的卷号,并且不能将它放在数据库中。我真的不知道这个错误。帮助将深深感激。谢谢。

EDITED table.html



 <form action="{% url 'score:markstable' %}" method="post" enctype="multipart/form-data">
                         {% csrf_token %}
                        <table id="myTable" class="table table-striped table-bordered" >
                            <thead>
                                <tr>
                                    <th>ROLL NO</th>
                                    <th>IT1</th>
                                    <th>IT2</th>
                                    <th>CA</th>
                                    <th>AVG</th>
                                    <th>SEMESTER</th>
                                    <th>TOTAL</th>
                                    <th>STATUS</th>
                                </tr>
                            </thead>
                            <tbody>
                            {% for marks in mrk %}

                            <tr>
                                <td width="73px">{{ marks.student }}</td>
                                <td><label for="IT1"></label>
                                    <input type="number" id="IT1" name="IT1" width="40px" min="0" max="20" value="{{ marks.IT1 }}"></td>
                                <td><label for="IT2"></label>
                                    <input type="number" id="IT2" name="IT2" width="40px" min="0" max="20" value="{{ marks.IT2 }}"></td>
                                <td><label for="CA"></label>
                                    <input type="number" id="CA" name="CA" width="30px" min="0" max="5" value="{{ marks.CA }}"></td>
                                <td><label for="Avg"></label>
                                    <input type="number" id="Avg" name="Avg" width="40px" min="0" max="25" value="{{ marks.Avg }}"></td>
                                <td><label for="Semester"></label>
                                    <input type="number" id="Semester" name="Semester" width="90px" min="0" max="100" value="{{ marks.Semester }}"></td>
                                <td><label for="total"></label>
                                    <input type="number" id="total" name="total" width="90px" min="0" max="850" value="{{ marks.total }}"></td>
                                <td><label for="status"></label>
                                    <input type="text" name="status" id="status" width="70px"value="{{ marks.status }}"></td>
                                </tr>

                            {% endfor %}

                            </tbody>
                         </table>&nbsp;
                        <input type="submit" value="Save" class="savebutton"><br>
                    </form>
&#13;
&#13;
&#13;

models.py

class studentinfo(models.Model) :
    roll_no = models.CharField(max_length=40)
    name = models.CharField(max_length=100, default="")

    def __str__(self):
        return self.roll_no

class marklist(models.Model) :
    student = models.ForeignKey(studentinfo, on_delete = models.CASCADE, null=True)
    subject = models.CharField(max_length=100)
    IT1 = models.IntegerField(default=0, validators=[MaxValueValidator(20), MinValueValidator(0)])
    IT2 = models.IntegerField(default=0, validators=[MaxValueValidator(20), MinValueValidator(0)])
    CA = models.IntegerField(default=0, validators=[MaxValueValidator(5), MinValueValidator(0)])
    Avg = models.IntegerField(default=0,validators=[MaxValueValidator(25), MinValueValidator(0)])
    Semester = models.IntegerField(default=0, validators=[MaxValueValidator(100), MinValueValidator(0)])
    total = models.IntegerField(default=0, validators=[MaxValueValidator(850), MinValueValidator(0)])
    status = models.CharField(max_length=20)

views.py

def markstable(request):
    template = 'table.html'
    form = MarklistForm(request.POST or None)
    if form.is_valid():
        form.save()
        return render(request, 'score/index.html')
    else:
        return render(request, 'score/index.html', {'error_message': 'Not Working'})

forms.py

class MarklistForm(forms.ModelForm):

    class Meta:
        model = marklist
        fields = ['IT1', 'IT2', 'CA', 'Avg', 'Semester', 'total', 'status']

1 个答案:

答案 0 :(得分:0)

好的,我的回答是先修改你的视图

def markstable(request):
    template = 'table.html'
    form = MarklistForm(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return render(request, 'score/index.html')

        else:
            return render(request, 'score/index.html', {'error_message': 'Not Working'})
   else:
       form = MarklistForm()
       return render(request. 'score/index.html', {'form':form})

在您的模板中,您需要添加{%csrf_token%} {{form}}等表单。您有错误,因为您的html模板中没有有效的表单,还需要检查是否为post方法,如果是post方法则保存模型中的更改,如果没有则显示空表单。告诉我发生了什么