You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中更新父模型的auto_now DateTimeField问题求助

问题解答

这段代码不可行,原因如下:

  • 仅给关联的Message对象的updated字段赋值,但没有调用self.message.save()将变更写入数据库,数据库里的Message记录不会有任何更新。
  • updated是auto_now类型的DateTimeField,该类型字段会在模型调用save()时自动设置为当前时间,直接赋值self.updated属于多余操作,甚至会被auto_now的特性覆盖。

可行实现方案

方案一:重写Attachment的save方法

在保存Attachment自身后,触发关联Message的保存操作(指定仅更新updated字段以提升性能):

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    # 调用Message的save方法,让auto_now字段自动更新为当前时间
    self.message.save(update_fields=['updated'])

方案二:使用Django信号(适合多场景触发的情况)

如果需要在多个操作修改Attachment时都更新Message的时间,可通过信号实现:

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Attachment)
def update_message_updated(sender, instance, **kwargs):
    instance.message.save(update_fields=['updated'])

注:使用update_fields参数可以避免不必要的字段更新,减少数据库开销。

内容的提问来源于stack exchange,提问作者Джони Депп

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:22:02