我在数据库中有一系列测试和案例。每当测试被废弃时,它都会过时,并且该测试的任何子案例也应该过期。我认为有两种方法可以做到这一点:
1)将保存功能修改为结束日期子案例 2)创建一个侦听正在保存的测试模型的接收器,然后结束其子案例的日期。
有什么理由使用另一个以外的其他人吗?
编辑:我看到blog post建议您在检查模型的给定值时使用save方法。因为我正在检查end_date,也许这表明我应该使用自定义保存?
Edit2 :此外,对于记录,完整层次结构是协议 - >测试 - >案例 - > Planned_Execution,并且只要一个end_dated,每个孩子也必须结束日期。我想我最终会为每个人做同样的事情。
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()
答案 0 :(得分:24)
我通常使用这个经验法则:
save()
(您实际上没有其他选项)。例如,在我正在处理的应用程序中,我有一个带有文本字段的模型,其中包含一个选项列表。这与旧代码接口,并替换具有类似文本字段但具有不同选项列表的旧模型。旧代码有时会从旧模型中选择我的模型,但是选项之间存在1:1的映射,所以在这种情况下我可以将选择修改为新选择。有必要在save()
。答案 1 :(得分:14)
据我所知,信号是解耦模块的一种手段。由于你的任务似乎只在一个模块中发生,我自定义保存。