关于覆盖模型的 save() 方法的语法,我在 Django 官方文档和 StackOverflow 上的众多答案之间遇到了一个奇怪的(无论如何对我来说)差异。我希望有人可以解释我观察到的差异。
这是 Django 当前官方文档中的示例:(来源:https ://docs.djangoproject.com/en/3.0/topics/db/models/#overriding-model-methods )
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def save(self, *args, **kwargs):
do_something()
super().save(*args, **kwargs) # Call the "real" save() method.
do_something_else()
注意对 super() 的调用——它没有参数。
现在,作为对比,这是我在同一主题上所做的每次搜索中一直发现的语法:即覆盖 django 模型的 save() 方法。要链接的示例太多了,所以我将简单地重写上面的示例代码,使用我在至少 6 个关于该主题的不同帖子中找到的确切语法:
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) # look at the arguments used here!
do_something_else()
明显的区别:super() 接受 2 个参数:模型的名称('Blog')和 self.
这仅仅是最近(ish)Django更新的一个案例,它使这种语法变得不必要?这似乎是最有可能的解释,但由于不清楚而且我还没有证实这一点,所以我在这里问。还是对这种差异有其他解释?
谢谢!