gpt4 book ai didi

python - Django - 在管理中保存时更新另一个模型

转载 作者:行者123 更新时间:2023-11-30 23:26:09 25 4
gpt4 key购买 nike

我正在使用 django 创建一个视频库网站。

我的库有 3 个模型:Video、VideoTopic 和 Course。

我有一个用于每个视频持续时间的 TimedeltaField。在管理中保存每个视频后,我想获取类(class)中所有视频的每个 TimedeltaField 的总和,然后将该总和保存到我的类(class)模型中的 TimedeltaField 中。

我正在使用django-timedeltafield ,这将很好地处理摘要。我尚未找到解决方案是在管理中保存每个视频后如何更新类(class)模型。有什么建议吗?

我的模型如下:

class Video(models.Model):
title = models.CharField(max_length=200)
topic = models.ForeignKey('VideoTopic')
duration = timedelta.fields.TimedeltaField(default="3 minutes, 30 seconds", help_text="(x minutes, x seconds)")

class VideoTopic(models.Model):
name = models.CharField(max_length=200, blank=True)
course = models.ForeignKey('course.Course')

class Course(models.Model):
name = models.CharField(max_length=200)
duration = timedelta.fields.TimedeltaField()

最佳答案

我建议您使用django signal 。这将确保您的模型同步,无论它们在何处更新(在应用程序、管理员等中)。

注册post save视频上的信号。在信号中,您将收到视频实例。只需在VideoTopic和Course中查询其相关记录并在那里进行数学计算即可。如果您不希望交易失败,我建议在交易中执行所有这些操作。如果您不需要始终保持最新的信息,那么这也是一个进行一些后台工作以减轻负担的机会。

为什么要有信号?

  • 分离关注点
  • 确保您的逻辑始终运行
  • 如果模型具有依赖项,可以帮助将事物直接从模型中解耦,从而减少加载顺序/循环依赖项的某些情况。

或者,您可以简单地覆盖视频模型的 save方法并在那里做同样的事情。无论哪种情况,如果您不想自己编写查询,只需使用外键中 ORM 中的相关属性即可。

关于python - Django - 在管理中保存时更新另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22668225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com