我在数据库中有一系列测试和案例。每当一个测试被废弃时,它就会被标记为结束日期,并且该测试的任何子案例也应该被标记为结束日期。我看到了两种方法来实现这一点:
1)修改保存功能以结束日期子案例。
2)创建一个接收器来监听正在保存的测试模型,然后结束它们的子案例的日期。
有什么理由使用另一个而不是另一个?
编辑:我看到这篇博文建议在检查模型的给定值时使用 save 方法。由于我正在检查 end_date,也许这表明我应该使用自定义保存?
Edit2:此外,为了记录,完整的层次结构是协议->测试->案例->计划执行,并且任何时候结束日期,每个孩子也必须结束日期。我想我最终会为每个人做基本相同的事情。
Edit3:事实证明,为了判断当前的 save() 是否是结束测试的那个,我需要访问旧数据和新数据,所以我使用了自定义保存。这是它的样子:
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()