У меня есть серия тестов и случаев в базе данных. Всякий раз, когда тест устаревает, он заканчивается, и любые подсекции этого теста также должны быть завершены. Я вижу два способа добиться этого:
1) Измените функцию сохранения в подвыборках даты окончания.
2) Создайте ресивер, который прослушивает сохранение тестовых моделей, а затем завершает их подсерии.
Любая причина использовать другую, чем другую?
Изменить: Я вижу, что этот пост в блоге предлагает использовать метод сохранения всякий раз, когда вы проверяете заданные значения модели. Поскольку я проверяю end_date, возможно, это предполагает, что я должен использовать пользовательское сохранение?
Edit2. Кроме того, для записи полная иерархия - это протокол → Test → Case → Planned_Execution, и каждый раз, когда вы закончите end_dated, каждый ребенок также должен быть endDated. Я полагаю, что в конечном итоге я сделаю в основном то же самое для каждого.
Edit3. Оказывается, что для того, чтобы определить, является ли текущее сохранение() тем, что является endDating Test, мне нужно иметь доступ к старым данным и новым данным, поэтому Я использовал обычное сохранение. Вот как это выглядит:
def save(self):
"""Use a custom save to end date any subCases"""
try:
orig = Test.objects.get(id=self.id)
enddated = (not orig.end_date) and self.end_date is not None
except:
enddated = False
super(Test, self).save()
if enddated:
for case in self.case_set.exclude(end_date__isnull=False):
case.end_date = self.end_date
case.enddater = self.enddater
case.save()