【问题标题】:Django: How to edit value and store back in database [duplicate]Django:如何编辑值并存储回数据库[重复]
【发布时间】:2019-06-29 06:47:43
【问题描述】:

我正在处理考勤登记。所以我有一个 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>

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    我猜你只是使用save()update() 方法。

    stu.lessons_left -= 1
    stu.save()
    

    或使用您不必使用 for 循环的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() 方法足以控制它。)

    【讨论】:

    • Python 在-= 处的lessons_left -= 1 处抛出语法错误,这很奇怪,但这个逻辑会起作用,谢谢。
    • 您应该使用 F 表达式在数据库中进行算术运算,您的解决方案可能会在并发场景中失败。
    • 我猜你不能在 update() 方法中使用它。只需改用update(lesson_left='your_number')
    • @CesarCanassa 有效!谢谢!但是假设我有多个当前按钮。我怎样才能为每个按钮做减法?
    • 正如@CesarCanassa 所说,直接在实例的值上使用 -= 并不是一个好主意。如果您有多个正在修改课程左侧的请求,它可能会发生冲突并且只会减少一次。
    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2023-03-27
    • 2013-10-29
    • 2016-08-15
    • 2013-02-18
    • 2012-06-19
    相关资源
    最近更新 更多