python - Django post_save 在创建时没有获得多对多属性

标签 python django

我正在将 post_save 方法绑定(bind)到 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_save 获取模型的所有属性?

最佳答案

ManyToMany 字段不参与模型 save() 方法,因此 post_save 不会识别任何 m2m 更改。要检测 m2m 变化,请使用 m2m_changed 信号。

django doc about m2m_changed .

关于python - Django post_save 在创建时没有获得多对多属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229184/

相关文章:

python - Django 管理员内联 : select_related

python : Import Libraries in Module or in Function

python - Django model.delete() 方法返回成功删除但实际上没有删除

django - 限制 Django 网址中的整数值

python - Objective-C 中非常慢的两个和解决方案的变体

python - 理解使用生成器的函数中的递归

python - Scipy mmread 用于矩阵数组实数通用

python - Django 请求获取参数

python - Django : Adding a property to the User class. 在运行时更改它和 UserManager.create_user

python - Django Model.ObjectDoesNotExist 异常