我已经阅读了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>
<input type="submit" value="Save" class="savebutton"><br>
</form>
&#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']
答案 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方法则保存模型中的更改,如果没有则显示空表单。告诉我发生了什么