【发布时间】:2020-07-15 15:17:46
【问题描述】:
我的问题是我有一个“分配”对象列表,它们都有一个名为“状态”的字段。状态为真或假,用户可以通过单击特定分配的复选框来选择更改值。
This is what the frontend looks like, each assignment has a checkbox which is its 'status'
我目前的解决方案是这样的:
课程详细信息.html:
{% for assignment in assignments %}
<tr>
<td scope="row" style="text-align: center">
<form>
{% csrf_token %}
{% if assignment.status %}
<input type="checkbox" checked onclick='assignmentFinish("False","{{assignment.id}}")'>
{% else %}
<input type="checkbox" onclick='assignmentFinish("True","{{assignment.id}}")'>
{% endif %}
</form>
</td>
<td><h5><span class="badge badge-{{assignment.module.colour}}">{{assignment.module}}</span></td>
<td><a href="{{ assignment.assigmentFile.url }}">{{assignment.title}}</a></td>
<td>{{assignment.deadline}}</td>
...
</tr>
{% endfor %}
ajax 代码:
function assignmentFinish(value,assignment) {
link = "{% url 'uni:finish-assignment' %}";
$.ajax({
type:'POST',
url: link,
data:{
status: value,
assignmentID: assignment,
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
success: function(){
}
});
}
views.py:
def finishAssignment(request):
# Get the product that user has wished for
assignmentID = request.POST['assignmentID']
status = request.POST['status']
assignment = Assignment.objects.get(pk=assignmentID)
print(status)
if status == 'True':
print("saving to true")
assignment.status = True
else:
print("saving to false")
assignment.status = False
assignment.save()
return HttpResponse('')
enter code here
models.py
class Assignment(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
course = models.ForeignKey(Course, on_delete=models.CASCADE, default=None)
module = models.ForeignKey(Module, on_delete=models.CASCADE)
deadline = models.DateField()
assignmentFile = models.FileField(default=None)
status = models.BooleanField()
此解决方案将工作一次,但一旦用户再次单击复选框,它将不会将信息保存在数据库中。例如,如果用户单击一个最初未重复选中的复选框,则打印语句将是这样的:
True
saving to true
[15/Jul/2020 16:11:51] "POST /uni/finishAssignment HTTP/1.1" 200 0
True
saving to true
[15/Jul/2020 16:11:52] "POST /uni/finishAssignment HTTP/1.1" 200 0
True
saving to true
显示正在调用ajax请求,但打印语句应该在真假之间交替。其原因可能是因为第一次将新值保存在数据库中后,显示复选框的页面上的信息没有更新。我该如何解决这个问题?
【问题讨论】: