Python Django post_save在创建时未获得多对多属性
我正在将Python Django post_save在创建时未获得多对多属性,python,django,Python,Django,我正在将post_save方法绑定到django中的模型,如下代码所示: def save_mymodel(sender,instance,*args,**kwargs): print 'save called' for parameter in instance.parameters.all(): print parameter.name post_save.connect(save_mymodel, sender=MyModel) 以下是我的模型: def
post_save
方法绑定到django中的模型,如下代码所示:
def save_mymodel(sender,instance,*args,**kwargs):
print 'save called'
for parameter in instance.parameters.all():
print parameter.name
post_save.connect(save_mymodel, sender=MyModel)
以下是我的模型:
def MyModel(models.Model):
parameters = models.ManyToManyField(Parameter)
def Parameter(models.Model):
name = models.CharField(max_length=100)
当我尝试从django admin创建带有任意数量参数的
MyModel
时,我只得到save called
作为输出。如果我再次从管理员那里保存相同的MyModel
对象,所有参数都会打印出来。在创建时调用save
与不在创建时调用有什么区别?如何确保在创建模型时使用post\u save
获取模型的所有属性 manytomy
字段不参与modelsave()
方法,因此post\u save
无法识别任何m2m更改。要检测m2m变化,请使用m2m\u变化
信号
.是否应在创建时调用
m2m\u changed
?我将我的代码从post_save
更改为m2m_changed
,但该函数在创建时甚至没有以这种方式调用。不,这是一个单独的信号。但无论如何,您都不会在save()
上添加m2m
字段,对吗?当我使用django admin创建对象时,有没有办法获取m2m属性并对其进行一些操作?为什么不能使用m2m\u changed
?当你保存m2m时,信号会被触发。不管怎样,我传递了错误的发送者。它应该是MyModel.attributes.through
Trym2m\u changed.connect(save\u MyModel,sender=MyModel.parameters.through)