首页 > 解决方案 > 如何更新通过外键 django ORM 访问的表中的值

问题描述

我的数据库模型看起来与此类似

class Leave(models.Model):
    available_leaves = models.IntegerField(default = 8)

class Policy(models.Model):
    name = models.CharField(max_length=20)

class Student(models.Model):
    name = models.CharField(max_length=20)
    rating = models.IntegerField(default=7)

class StudentLeave(models.Model):
    leave = models.ForeignKey(Leave, on_delete=models.CASCADE)
    policy = models.ForeignKey(Policy, on_delete=models.CASCADE)
    student = models.ForeignKey(Student, on_delete=models.CASCADE)

我想从这里扣除学生的假期,我试过这个

leave = Leave.objects.filter(pk = 1).first()
policy = Policy.objects.filter(pk = 1).first()
student = Student.objects.filter(name = 'matthew').first() 
studentleave = StudentLeave.objects.filter(student = student, policy = policy, leave = leave).first()

现在我有 studentleave 对象,通过它我可以访问连接到该表的每个表。所以我尝试访问这个

studentleave.leave.available_leaves-=1 # Tried reducing it by one
print(studentleave.leave.available_leaves) #prints as 7 as expected because 8 is default

但是当我再次访问同一个模型时,它的值仍然是 8(旧值)我已经尝试过 update 和 save 方法studentleave.leave.update() and studentleave.update(),基本上都会抛出错误,因为该对象没有属性更新

我怎样才能为他们保存这些新值。

提前感谢您花时间解决此问题。

标签: pythondjangodjango-models

解决方案


要将更改的数据保存到数据库中,应该使用.save()模型实例的方法。因此,您需要调用studentleave.leave.save(),它将UPDATE对数据库执行 sql 查询。


推荐阅读