python - 如何更新通过外键 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()
,基本上都会抛出错误,因为该对象没有属性更新
我怎样才能为他们保存这些新值。
提前感谢您花时间解决此问题。
解决方案
要将更改的数据保存到数据库中,应该使用.save()
模型实例的方法。因此,您需要调用studentleave.leave.save()
,它将UPDATE
对数据库执行 sql 查询。
推荐阅读
- reactjs - 从类到函数 React
- html - 我怎样才能使背景图像适应?
- reactjs - react-create-app - 无法通过本地主机访问页面 - ERR_SSL_PROTOCOL_ERROR
- java - 如何在java中模拟函数调用
- javascript - 选中 Vuejs Vuetify 时更改复选框图标
- javascript - CypressError: cy.find() 失败,因为此元素与 DOM 分离
- python - Kivy Button 填满整个屏幕
- python - 在 mplfinance 中查找颜色列表,以便 seq_col 绘制线条
- c# - 如何使用where子句从c#中的数据库表中获取MAX值
- ab-testing - 与利润和客户数量相关的 A/B 模型比较