gsi*_*man 16 python django django-models
我有以下两种型号:
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)
...
Run Code Online (Sandbox Code Playgroud)
我希望活动模型在保存与插入或更新相关的取消时都要注意.
最好的方法是什么?
wil*_*urd 17
您想要了解的是Django的信号(也请查看此页面),特别是模型信号 - 更具体地说,是post_save信号.信号是Django的插件/钩子系统版本.每次保存模型时都会发送post_save信号,无论是更新还是创建(并且它会让您知道它是否已创建).这是您在活动取消时使用信号获取通知的方式
from django.db.models.signals import post_save
class Activity(models.Model):
name = models.CharField(max_length=50, help_text='Some help.')
entity = models.ForeignKey(CancellationEntity)
@classmethod
def cancellation_occurred (sender, instance, created, raw):
# grab the current instance of Activity
self = instance.activity_set.all()[0]
# do something
...
class Cancellation(models.Model):
activity = models.ForeignKey(Activity)
date = models.DateField(default=datetime.now().date())
description = models.CharField(max_length=250)
...
post_save.connect(Activity.cancellation_occurred, sender=Cancellation)Run Code Online (Sandbox Code Playgroud)
以下有什么问题?
class Cancellation( models.Model ):
blah
blah
def save( self, **kw ):
for a in self.activity_set.all():
a.somethingChanged( self )
super( Cancellation, self ).save( **kw )
Run Code Online (Sandbox Code Playgroud)
它可以让您非常精确地控制模型之间的通知。在某种程度上,这就是典型的“为什么 OO 这么好?” 题。我认为 OO 很好,正是因为您的 Cancellation 和 Activity 对象集合可以充分配合。
| 归档时间: |
|
| 查看次数: |
3306 次 |
| 最近记录: |