Django:如何编辑值并将其存储回数据库

时间:2019-02-05 12:36:39

标签: python django django-views

我正在做一个考勤机。所以我有一个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>

1 个答案:

答案 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()方法足以控制它。)