以下是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()
我是对的吗?
答案 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()
之前调用它来记录时间戳
同样也适用于保存后操作。