我在数据库中有一系列测试和案例.每当测试被废弃时,它都会过时,并且该测试的任何子案例也应该过期.我认为有两种方法可以做到这一点:
1)将保存功能修改为结束日期子案例.
2)创建一个侦听正在保存的测试模型的接收器,然后结束其子案例的日期.
有没有理由使用另一个以外的人?
编辑:我看到这篇博文建议在检查模型的给定值时使用save方法.因为我正在检查end_date,也许这表明我应该使用自定义保存?
Edit2:另外,对于记录,完整的层次结构是Protocol - > Test - > Case - > Planned_Execution,并且只要一个end_dated,每个子节点也必须是endDated.我想我最终会为每个人做同样的事情.
编辑3:事实证明,为了判断当前的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()
Run Code Online (Sandbox Code Playgroud) 这是一个以前曾被问过的问题,但不完全涵盖相同的问题.我已经阅读了这些(问题,问题,问题和问题),但问题略有不同.
我有一个博客文章模型(速度伪代码),其中包含标题,摘要和正文以及相关的图像.
class Post(models.Model):
title = CharField
abstract = TextField
body = TextField
class Image(models.Model):
post = ForeignKey(Post)
imagefile = ImageField
Run Code Online (Sandbox Code Playgroud)
现在,我想要添加的是能够存储此Post模型的更改历史记录.我想到了两种可能性:
可能性1
class PostHistory(models.Model):
post = ForeignKey(Post)
title_delta = TextField
abstract_delta = TextField
body_delta = TextField
Run Code Online (Sandbox Code Playgroud)
然而,这有一个问题,即它存储增量没有变化(例如,当title没有变化时,body字段只有一个增量.也就是说,当多个字段发生变化时,它符合'1版本== 1完成修订版".
可能性2
class PostRevision(models.Model):
post = ForeignKey(Post)
field = CharField #Field name
delta = TextField
Run Code Online (Sandbox Code Playgroud)
通过两种不同的方法,这成功地给了我一个场的差异历史,我将使用diff-match-patch生成(比内置的difflib稍微高一些).我现在遇到的两个问题与主对象的生成有关(即链中的最高版本).
问题是,我如何处理与Post对象关联的图像的并发更改,因为这些将通过模型body字段内的引用进行更改Post(这是Markdown格式化的文本字段,然后进行编辑POST …