Krishna Manohar
Krishna Manohar

Reputation: 334

How to update a value from table accessed via foreign key django ORM

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

Answers (2)

Andrey RF
Andrey RF

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

Alexandr Tatarinov
Alexandr Tatarinov

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

Related Questions