例如,我有一个YouTubeVideo模型。
当管理员创建视频时,他将视频id传递给管理员界面,然后在第一次保存视频详细信息时加载,管理员可以对这些详细信息进行一些更改(例如,删除视频描述中的内容):
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.id is None:
video_data = json.loads(urllib2.urlopen(
'https://www.googleapis.com/youtube/v3/videos?key=somekey&part=snippet&id=%s' % self.video_id).read())
video_info = video_data['items'][0]['snippet']
self.title = video_info['title']
self.description = video_info['description']
if 'thumbnails' in video_info:
if 'high' in video_info['thumbnails']:
self.thumb = video_info['thumbnails']['high']['url']
if 'maxres' in video_info['thumbnails']:
self.thumb_max_res = video_info['thumbnails']['maxres']['url']
else:
self.thumb_max_res = self.thumb
并且只有在这完成之后(在管理员编辑之后),我想向用户发送推送通知。
所以,问题是,我应该怎么做?(我的意思是我应该在我的代码中做什么?)
我认为你可以使用django信号post_save
方法。它的目的是在对象保存后进行后处理。我不建议重写save
方法,因为它很容易弄乱。Django doc: https://docs.djangoproject.com/en/1.8/ref/signals/#post-save