django自定义保存组织

时间:2013-12-29 17:06:28

标签: python django save models

所以我正在查看自定义save方法,它看起来像这样:

def save(self, *args, **kwargs):
    is_created = False
    if not self.pk:
        is_created = True
    super(self, ModelName).save(*args, **kwargs)
    if is_created:
        #do something
    return True

我有两个主要问题......首先...... return True是否必要?如果是这样,为什么?...第二...... is_created的目的是什么?为什么我不能将#do something放在if not self.pk

中 代码中的

问题:

为什么我不能做以下事情:

def save(self, *args, **kwargs):
    if not self.pk:
        #do something
    super(self, ModelName).save(*args, **kwargs)
    return True

或者如果可以的话,为什么写这段代码的人会这样做呢?有什么不同吗?

1 个答案:

答案 0 :(得分:1)

save不必返回任何内容,因此您可以删除return语句。

def save(self, *args, **kwargs):
    if not self.pk:
        #do something
    super(self, ModelName).save(*args, **kwargs)

除非您在第一次保存对象后必须执行某些操作,否则确实没有太大区别。一旦调用了save方法,就应该填充pk属性,所以如果你需要在第一次保存之后对它做一些事情,你需要跟踪它(就像你发布的第一个代码示例一样) )


第一个代码示例的替代方法可能是使用signals

def do_something_only_newly_created_objects(sender, **kwargs):
   if kwargs['created']:
      # do_something()

post_save.connect(do_something_only_newly_created_objects, sender=YourModel)