所以我正在查看自定义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
或者如果可以的话,为什么写这段代码的人会这样做呢?有什么不同吗?
答案 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)