Заголовок вопроса - вполне предложение, но, надеюсь, приведенный ниже код прояснит его:
class Foo(models.Model):
...
class AbstractParent(models.Model):
foos = models.ManyToManyField(
Foo,
related_name='%(app_label)s_%(class)s_related'
)
def bar(self):
...
class Meta:
abstract = True
class ChildOne(AbstractParent):
...
class ChildTwo(AbstractParent):
...
Допустим, ярлык моего приложения - myapp.
В основном, базовый класс ChildOne
и ChildTwo
имеет M2M для класса Foo
. Я хочу сделать следующее: всякий раз, когда объект класса Foo
сохраняется, я хочу вызывать метод bar()
всех объектов ClassOne
и ClassTwo
, который имеет отношение к Foo
объект через поле foos
. Для этого я попытался написать простой сигнал:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Foo)
def call_bar_for_all_related_objects_to_foo(sender, instance, **kwargs):
# Do the thing
В этот момент я вроде как потерян. Как запросить все дочерние классы класса AbstractParent
и вызывать их методы bar()
всякий раз, когда в сигнале есть связь с instance
? В идеале я хочу сделать запрос к моей базе данных только один раз, а в одном запросе я хочу получить все объекты ChildOne
и ChildTwo
, связанные с instance
в сигнале. Обратите внимание, что в моих реальных моделях есть более двух дочерних классов AbstractParent
, поэтому ответ, который учитывает это, приветствуется. Спасибо за любую помощь.