Django Сохранение свойства метода модели в базу данных
У меня есть ModelOne
, который имеет метод модели, допустим method_that_does_stuff
, с декоратором @property
, который вычисляет булево значение, основанное на значении ModelThree
, которое является ForeignKey
из ModelTwo
, которое является ManyToMany
из ModelOne
. Я пытаюсь сделать так, чтобы при изменении значения method_that_does_stuff
, вызванном изменениями в ModelThree
, сохранялось булево значение в ModelOne
. Ниже приведена моя реализация:
from django.db import models
class ModelThree (models.Model):
some_input = models.TextField()
model_two = models.ForeignKey(ModelTwo, on_delete=models.CASCADE)
class ModelTwo (models.Model):
name = models.CharField(max_length=200)
class ModelOne (models.Model):
name = models.CharField(max_length=200)
boolean_field_to_change = models.BooleanField(default=False)
model_twos = models.ManyToManyField(ModelTwo)
@property
def method_that_does_stuff(self):
# It does some stuff and returns either True or False, but let's assume True
# The True or False return depends on ModelThree's some_input field
# If the some_input field doesn't change, then it will stay False
return True
def save(self, *args, **kwargs):
self.boolean_field_to_change = self.method_that_does_stuff
super(ModelOne, self).save(*args, **kwargs)
<<<Однако по какой-то причине, когда я запускаю оболочку Django и получаю все объекты , ModelOne
становится method_that_does_stuff
, но True
по-прежнему имеет значение по умолчанию boolean_field_to_change
. Я нашел следующее решение: False
Django Model Method or Calculation as Field in Database, которое в основном является моей текущей реализацией, но оно не работает. Это потому, что действительно происходит на save
? Разве ModelThree
не срабатывает на save
при изменении значения ModelOne
?