django - 子模型更新 Django ForeignKey 关系中的父模型
问题描述
假设以下模型架构,
父模型:
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 官方文档,链接。我想添加另一个链接,这是我见过的关于 django 信号的最好的博客文章之一。
编辑安德烈·格拉回应
进行获取呼叫并带来 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()
推荐阅读
- c++ - 使用编译时类型和运行时函数创建 std::tuple
- google-sheets - 谷歌表格公式根据匹配条件查找缺失的数字
- reactjs - 下载超过 10mb React + Spring boot 的文件时出现“无法获取”错误
- database-connection - 连接池是否利用 SQL 页面缓存以及如何利用?
- mvvm - Dagger 2 + Service + Repository(Room DB+Cloud)
- swift - 修改 CVPixelBuffer
- c - 无法运行程序:collect2:错误:ld 返回 1 退出状态
- javascript - 如何在 Reactjs 中删除 cookie
- java - 实验室:登录名。如果超过一定数量的字符,则打印整个字符串时出错
- woocommerce - WooCommerce webhook 属性