Django запускает родительскую модель сохранения при редактировании inline в админке - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть модель (Родитель) с отношением один-ко-многим к другой модели (Ребенок).Метод сохранения родительской модели перезаписывается:

class ParentModel(models.Model)
    (...)

    def save(self, *args, **kwargs):
        (...) # Do sth with the model
        super(ParentModel, self).save(*args, **kwargs)

class ChildModel(models.Model):
    parent= models.ForeignKey(ParentModel)

В административной панели несколько дочерних моделей объектов отображаются с помощью StackedInline на странице родительской модели.Если поле parent отредактировано и сохранено, вызывается метод save.Когда редактируются только дочерние поля, Django не вызывает метод save parent (как и ожидалось, потому что ничего не изменилось).

Каков наилучший способ принудительного сохранения родителя, даже если был отредактирован только дочерний элемент (так что мой перезаписанный метод выполняет свои функции)?

1 Ответ

2 голосов
/ 06 февраля 2012

У вас есть несколько решений.Здесь идет от простого к сложному:

Вы можете реализовать пользовательский метод save для ChildModel, который вызывает ParentModel.save.
Вы также можете подключиться к ChildModel * ** или pre_save сигнал.

Теперь эти два решения будут раздражать, если вы собираетесь обновить сразу много ChildModel экземпляров, так как вы будете вызывать ParentModel.save несколько раз, возможнобез цели.
Вы можете затем использовать следующее:
Переопределите свои ParentModel ModelAdmin.change_view для обработки вашей логики;это довольно сложно, однако.

Я, однако, очень удивлен поведением, с которым вы сталкиваетесь, после проверки источника объект должен быть сохранен в любом случае;отредактировано или нет.

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