子模型更新Django ForeignKey关系中的父模型
假设以下模型为模式 父模型: 众多子模型之一: 我的目标如下:在修改任何子模型时,父模型的起始字段始终更新。子模型更新Django ForeignKey关系中的父模型,django,Django,假设以下模型为模式 父模型: 众多子模型之一: 我的目标如下:在修改任何子模型时,父模型的起始字段始终更新。 基本上,如果一个新数据实例的时间戳早于开始字段,我希望开始字段更新为该实例的时间戳值。在删除最早的时间参考点数据实例的情况下,我希望批次开始字段更新为第二个最早的时间。结束字段也一样。一种可能的方法是添加相关模型的post或pre save信号,并根据此信息更新必要的字段。Django信号的官方文件。我想添加另一篇关于django signal的最好的博客文章 编辑AndréGuerra
基本上,如果一个新数据实例的时间戳早于开始字段,我希望开始字段更新为该实例的时间戳值。在删除最早的时间参考点数据实例的情况下,我希望批次开始字段更新为第二个最早的时间。结束字段也一样。一种可能的方法是添加相关模型的post或pre save信号,并根据此信息更新必要的字段。Django信号的官方文件。我想添加另一篇关于django signal的最好的博客文章 编辑AndréGuerra回复 执行get调用并带来批处理实例的最简单方法之一。我想说什么
@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()
@receiver(保存后,发送方=数据)
批处理子项保存时的定义(发送方、实例,**kwargs):
batch\u instance=batch.objects.get(pk=instance.batch)
如果(instance.timestampbatch_instance.end):
batch_instance.end=instance.timestamp
批处理\u实例。保存()
根据Shakil的建议,我提出了以下建议:(我的疑问是如何保存父模型)
@receiver(保存后,发送方=数据)
批处理子项保存时的定义(发送方、实例,**kwargs):
if(instance.timestampinstance.batch.end):
instance.batch.end=instance.timestamp
instance.batch.save()
class Data(models.Model):
batch = models.ForeignKey(Batch, on_delete=models.ON_CASCADE)
timestamp = models.DateTimeField()
@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()
@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()