繁体   English   中英

如何更新通过外键 django ORM 访问的表中的值

[英]How to update a value from table accessed via foreign key 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 object 通过它我可以访问连接到该表的每个表。 所以我尝试访问这个

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

但是当我再次访问相同的 model 时,它的值仍然是 8(旧值)我已经尝试了studentleave.leave.update() and studentleave.update()的更新和保存方法,这基本上是抛出错误,因为 object 没有属性更新

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

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

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

您可以使用get方法通过主键从 db 获取数据。 Get方法仅从 db 中返回一个值(如果存在)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM