假设以下模型架构,
父模型:
class Batch(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
许多儿童模型之一:
class Data(models.Model):
batch = models.ForeignKey(Batch, on_delete=models.ON_CASCADE)
timestamp = models.DateTimeField()
我的目标如下:拥有一个父模型的起始字段,当修改任何子模型时,该起始字段始终会更新。
基本上,如果新数据实例的时间戳早于开始字段,我希望将开始字段更新为该实例时间戳值。在删除最旧时间参考点的数据实例的情况下,我希望将批处理开始字段更新为第二旧的。端场反之亦然。
执行此操作的可能方法之一是添加相关模型的后或预保存信号,并据此更新必要的字段。 Django 信号官方文档,link https://docs.djangoproject.com/en/2.1/topics/signals/。我想添加另一个link https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html,我见过的关于 django 信号的最好的博客文章之一。
编辑安德烈·格拉的回应
进行 get 调用并引入 Batch 实例的最简单方法之一。我想说的话
@receiver(post_save,sender=Data)
def on_batch_child_saving(sender,instance,**kwargs):
batch_instance = Batch.objects.get(pk=instance.batch)
if (instance.timestamp < batch_instance.start):
batch_instance.start = instance.timestamp
batch_instance.save()
elif (instance.timestamp > batch_instance.end):
batch_instance.end = instance.timestamp
batch_instance.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)