Как обновить значение из таблицы, доступ к которой осуществляется через внешний ключ django ORM - PullRequest
0 голосов
/ 19 апреля 2020

Мои модели БД выглядят примерно так:

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

Но когда я снова получаю доступ к той же модели, ее значение по-прежнему равно 8 (старое значение), я попытался обновить и сохранить метод на studentleave.leave.update() and studentleave.update(), которые в основном ошибка выдачи, потому что у этого объекта нет атрибута update

Как мне сохранить эти новые значения для них.

Заранее благодарим за потраченное время на решение этой проблемы.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Для сохранения измененных данных в базе данных следует использовать метод .save() экземпляра модели. Так что вам нужно вызвать studentleave.leave.save(), который выполнит запрос UPDATE sql в базу данных.

0 голосов
/ 19 апреля 2020

Вы можете использовать метод get для получения данных из БД через первичный ключ. Get метод возвращает только одно значение из БД, если оно существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...