Reputation: 334
My DB models looks similar to this
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)
I want to deduct the leave of the student from here, I have tried this
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()
Now I have studentleave object through which I can access every table connected to this table. So I have tried accessing this
studentleave.leave.available_leaves-=1 # Tried reducing it by one
print(studentleave.leave.available_leaves) #prints as 7 as expected because 8 is default
But when I access the same model again, it's value is still 8 (old value)
I have tried update and save method on studentleave.leave.update() and studentleave.update()
which are basically throwing error because that object has no attribute update
How can I save those new values for them.
Thanks in advance for spending your time to solve this problem.
Upvotes: 0
Views: 2224
Reputation: 342
You can use get
method to get data from db via primary key. Get
method return only one value from db if it exists.
Upvotes: 0
Reputation: 4034
To save changed data into database, one should use .save()
method of the model instance. So what you need is to call studentleave.leave.save()
, which will perform an UPDATE
sql query into database.
Upvotes: 1