我们有两个简单的模型:
class Master(models.Model):
pass
class Detail(models.Model):
master = models.ForeignKey(Master)
order = models.IntegerField()
我想验证母版的所有细节的顺序是一个序列,例如,三个细节意味着1,2,3。
我在Master.clean()中尝试过,但如果在主 - 详细信息页面上更改了详细信息,我就无法查看详细信息。
现在我正在尝试在Master的管理表单中执行此操作,但我遇到了同样的问题,如何访问修改后的datail数据?除此之外,我更愿意在模型的某个地方进行检查,所以我不必为其他形式重复自己。
答案 0 :(得分:0)
一种棘手的方法是从验证中的事务中获取帮助。例如:
@transaction.commit_on_success
def save_form(self, master, details):
# Save or update master instance and details list
if not is_sequence(): # check sequences in details.
raise Exception('invalid')
然后,不要使用表单的保存方法,而是在需要的任何地方使用此方法,或者只是覆盖表单的保存方法。
实施并不重要,我只想提出使用交易的想法。这样就可以保存数据库中的所有值,这样在is_sequence()中,您可以轻松访问详细信息,并在提交此事务之前验证它们,如果它没有进行有效的回滚。