【发布时间】:2014-12-17 01:33:23
【问题描述】:
我对 Django 的信号不是很熟悉,需要一些帮助。
如何在保存实例之前修改 pk_set?我必须向信号调用者返回一些东西(比如kwargs)吗?还是我自己保存instance?
作为一个简化的示例:我想确保在保存我的所有视频时包含pk=1 的类别。我将如何使用m2m_changed 做到这一点?
class Video(models.Model):
category = models.ManyToManyField('Category')
def video_category_changed(sender, **kwargs):
action = kwargs.pop('action', None)
pk_set = kwargs.pop('pk_set', None)
instance = kwargs.pop('instance', None)
if action == "pre_add":
if 1 not in pk_set:
pk_set.update( [ 1 ] ) # adding this to the set
# do something else?
# profit?
m2m_changed.connect( video_category_changed, sender=Video.category.through )
【问题讨论】:
-
信号中不需要返回值。您也不需要保存实例。只需添加在响应所选事件时要执行的代码。
标签: python django django-signals django-orm m2m