簡體   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