【发布时间】:2011-08-01 15:03:56
【问题描述】:
我在数据库中有一系列测试和案例。每当一个测试被废弃时,它就会被标记为结束日期,并且该测试的任何子案例也应该被标记为结束日期。我看到了两种方法来实现这一点:
1) 修改保存功能以结束日期子案例。
2)创建一个接收器来监听正在保存的测试模型,然后结束它们的子案例的日期。
有什么理由使用其他的吗?
编辑:我看到blog post 建议在检查模型的给定值时使用 save 方法。由于我正在检查 end_date,也许这表明我应该使用自定义保存?
Edit2:另外,为了记录,完整的层次结构是 Protocol -> Test -> Case -> Planned_Execution,并且任何时候 end_dated,每个孩子也必须 endDated。我想我最终会为每个人做基本相同的事情。
Edit3:原来为了判断当前的save()是否是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()
【问题讨论】:
-
我想补充一点,您可能应该在 save 中接受 *args 和 **kwargs 并将它们传递给 super 以防有人想要使用 update_save 或 force_insert 之类的参数。
标签: python django save receiver