0

关于覆盖模型的 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更新的一个案例,它使这种语法变得不必要?这似乎是最有可能的解释,但由于不清楚而且我还没有证实这一点,所以我在这里问。还是对这种差异有其他解释?

谢谢!

4

0 回答 0