【问题标题】:django custom save organizationdjango 自定义保存组织
【发布时间】:2014-01-16 15:29:07
【问题描述】:

所以我在看一个自定义的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

或者如果可以的话,为什么编写此代码的人会以另一种方式进行?有区别吗?

【问题讨论】:

    标签: python django save models


    【解决方案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)
    

    【讨论】:

    • ahhhh,所以由于#do something 正在操作一些字段,所以需要先保存对象!但如果它与实际模型脱节,那就没有区别了!
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2014-08-11
    • 2010-11-26
    • 2014-07-11
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多