Ruby on Rails有一个叫做touch
的概念。
当你有通过外键链接的对象,并且你想有条件地更新的时候,这是很有帮助的,比如父对象的updated_at
字段,每当子对象被更新的时候。这可以有效地用于俄罗斯娃娃缓存以及其他有用的东西。
根据Rails文档:
class Product < ApplicationRecord
has_many :games
end
class Game < ApplicationRecord
belongs_to :product, touch: true
end
将touch
设置为true
时,任何更改游戏记录updated_at
的操作也将更改相关产品的updated_at
,从而使该高速缓存过期。
我试图在Django中找到一种等效的方法来实现这一点,但我还没有找到一个优雅的解决方案。如何在Game.updated_at
被更改时强制更新Product.updated_at
?
class Product(models.Model):
updated_at = models.DateTimeField()
class Game(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
updated_at = models.DateTimeField()
谢谢你!
1条答案
按热度按时间qzwqbdag1#
通常的实现方法是覆盖
.save()
方法:请注意,添加
auto_now=True
将导致在保存示例时自动更新时间戳。