来自Django文档的超级方法

时间:2016-02-26 11:39:38

标签: python django

以下是Django文档中的一篇文章:

  from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, *args, **kwargs):
        do_something()
        super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
        do_something_else()  

我的犹豫是专注于保存方法。 为什么作者将do_something与do_something_else分开? 由于存在'呼叫"真实" save()方法',do_something()的含义是什么,它似乎是" false"我甚至可以进行操作:

def save(self, *args, **kwargs):
    super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
    do_something()
    do_something_else()

我是对的吗?

3 个答案:

答案 0 :(得分:1)

do_something()do_something_else()不是真正的功能。它们没有定义。它们只是暗示你在那里做某事,然后,如果你需要,做一些其他事情,甚至实现功能,并在那里调用它们,如果你需要的话。

通常,您需要一些字段来在保存另一个字段时自动更新/获取值。一种方法是重写模型保存方法。通常在拨打super().save()之前执行此操作。

答案 1 :(得分:1)

是的,你是对的。

没有深刻的含义。

句子只是意味着"你可以在 super()之前编写一些你想要做的方法。保存或者在 super()之后。save() "

但是,我有点怀疑你知道 super(),这是python中的语法之一。

答案 2 :(得分:1)

嗯,它只是表明你可以在使用super调用父类或兄弟方法之前或之后删除函数(或编写代码)。

但首先,你必须知道what super is ......

在您的示例中,您使用super调用save,这会触发基于django的方法和函数,并执行ModelBase.save()内的许多其他内容。

您这样做是为了遵循标准的django保存程序。

,您可能需要进行一些检查或进行一些预保存工作,因此您可以调用方法来执行应该在保存模型实例之前完成的操作。也许你想将记录时间记录到一个文件中,你只需编写一个方法并在调用super().save()之前调用它来记录时间戳

同样也适用于保存后操作。

相关问题