假设以下模型架构,
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()
我的目标如下:拥有一个父模型的开始字段,该字段在修改任何子模型时始终会更新。 基本上,如果新数据实例的时间戳早于起始字段,我希望将起始字段更新为该实例的时间戳值。在删除最旧的时间参考点的数据实例的情况下,我希望将批处理开始字段更新为第二个最旧的时间参考点。反之亦然。
答案 0 :(得分:1)
执行此操作的一种可能方法是添加相关模型的发布或预保存信号,并根据此信号更新所需的字段。信号的Django官方文档link。我想添加另一个link,这是我所见过的有关Django信号的最佳博客文章之一。
进行get调用并带来Batch实例的最简单方法之一。我想说的
data = {"Country": {}}
counter = 1
for cnt in range(0, 10):
new_dic_name = "test" + str(counter)
data['Country'].update({new_dic_name : {
"population": "data",
"GDP": "data",
"measureInVolume": "gallons"
}})
counter = counter + 1
答案 1 :(得分:0)
基于Shakil的建议,我提出了以下建议:(我的疑问是如何保存父模型)
@receiver(post_save,sender=Data)
def on_batch_child_saving(sender,instance,**kwargs):
if (instance.timestamp < instance.batch.start):
instance.batch.start = instance.timestamp
instance.batch.save()
elif (instance.timestamp > instance.batch.end):
instance.batch.end = instance.timestamp
instance.batch.save()