我有以下两个模型:
class Activity(models.Model):
name = models.CharField(max_length=50, help_text='Some help.')
entity = models.ForeignKey(CancellationEntity)
...
class Cancellation(models.Model):
activity = models.ForeignKey(Activity)
date = models.DateField(default=datetime.now().date())
description = models.CharField(max_length=250)
...
我希望Activity模型在保存与之相关的Cancellation(插入或更新)时能够知道。
最好的办法是什么?
3条答案
按热度按时间wb1gzix01#
您要查看的是Django's signals(也可以查看this page),具体来说就是模型信号--更具体地说,是post_保存信号。信号是Django的插件/钩子系统版本。post_保存信号在每次保存模型时发送,无论是更新还是创建(它会让您知道它是否已创建)。这就是当一个活动取消时,你如何使用信号来得到通知
wlp8pajw2#
以下内容有什么问题?
它将允许您非常精确地控制模型之间的通知。在某种程度上,这是典型的“为什么面向对象这么好?“问题。我认为OO是好的,正是因为你的集合Cancellation和Activity对象可以充分合作。
ztmd8pv53#
在Django中,你可以使用signal来更新父节点。为此,您需要创建一个信号来侦听子模型的
post_save
信号,并发送一个信号来更新父模型。在上面的代码中,我们创建了一个信号函数来监听
Cancellation
模型的post_save
信号。update_activity
函数接受sender
和instance
参数,其中sender
是发送信号的模型的类,instance
是保存的模型的示例。kwargs
参数包含任何其他关键字参数。保存
Cancellation
对象时,sender
参数设置为Cancellation
,instance
参数设置为已保存的Cancellation
示例。update_activity
函数获取activity
对象并保存它,如果有,则触发它的post_save
信号。现在,当保存
Cancellation
对象时,update_activity
函数也会更新Activity
模型。