Я знаю, как обновить какое-то поле ForeignKey. Например, когда я хочу менять поле last_modified каждый раз, когда изменяется Configuration или SomeOtherImportantClass:
class Configuration(models.Model):
title = models.TextField()
last_modified = models.DateTimeField(auto_now=True)
class SomeOtherImportantClass(models.Model):
conf = models.ForeignKey(Configuration)
important_number = models.IntegerField()
def save(self, *args, **kwargs):
conf.last_modified = timezone.now() # I'm not sure if it is necessary
conf.save()
return super().save(*args, **kwargs)
, но в моей реальной ситуации модель Cofiguration является ForeignKey для более чем 30 других моделей. В каждом из них я хочу обновить поле configuration.last_modified для каждого изменения, выполненного для них, или когда другая модель (которая имеет ForeignKey для некоторой модели, которая имеет ForeignKey do Configuration) изменяется. Таким образом, это выглядит так:
class Configuration(models.Model):
title = models.TextField()
last_modified = models.DateTimeField(auto_now=True)
class A(models.Model):
conf = models.ForeignKey(Configuration) # conf.last_modified must be updated on every change on A model object.
class B(models.Model):
conf = models.ForeignKey(Configuration) # same
...
class Z(models.Model):
conf = models.ForeignKey(Configuration) # same
class AA(models.Model):
some_field = models.TextField()
a = models.ForeignKey(A)
...
class ZZ(models.Model)
some_field = models.TextField()
z = models.ForeignKey(Z)
, поэтому даже если поле объекта AA "some_field" изменено, я хочу обновить поле конфигурации last_modified. Есть ли рекурсивный способ объявить это один раз в Configuration или где-то еще?
ОБНОВЛЕНИЕ: Могут существовать и правнуки, такие как классы AAA и AAAA.