我正在做一个考勤机。所以我有一个HTMl复选框,如果有人在这里,用户可以在上面打勾。如果是,则视图将提取人员在数据库中的课程数量,并从值中减去1。我该如何实现?这是使用Django完成的。
views.py:
def present(request):
students = Student.objects.filter(squad='LearnToSwim1')
completed = request.GET.get('pre')
for stu in students:
if request.POST.get('completed', '') == 'on':
print("Present!")
#I don't know what to do here to extract the lessons_left and subtract 1 from it.
else:
print("Not present")
models.py:
class Student(models.Model):
student_name = models.CharField(max_length=200)
squad = models.CharField(max_length=30, choices=SQUAD, default='INSERT_SQUAD')
lessons_left=models.IntegerField(default=0)
def __str__(self):
return self.student_name
presentform.html:
<form action="/present/" method="POST">
{% csrf_token %}
<p>
<input type="checkbox" id="completed" name="completed" />
<label for="completed">Present</label>
</p>
<input class="waves-effect waves-light btn" type='submit'/>
</form>
答案 0 :(得分:0)
我想您只是使用save()
或update()
方法。
stu.lessons_left -= 1
stu.save()
或使用不必用于循环的update
。
Student.objects.filter(squad='LearnToSwim1').update(lessons_left-=1)
如果我错过了什么,告诉我。
正如@Cesar所说,我更新为使用F
表达式。
from django.db.models import F
Student.objects.filter(squad='LearnToSwim1').update(lessons_left=F(lessens_left)+1)
正如@Gospodinov所说,如果有可能同时发生,则可以使用事务处理。 (但是我想update()
方法足以控制它。)