Django - должен ли super () принимать какие-либо аргументы при переопределении функции save () модели? - PullRequest
0 голосов
/ 09 июля 2020

Что касается синтаксиса для переопределения метода 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 () - он имеет нет аргументов.

Теперь, для сравнения, вот синтаксис, который я все время нахожу при каждом поиске. сделал по той же теме: то есть, переопределив метод save () модели django. Слишком много примеров для ссылки, поэтому я просто собираюсь переписать приведенный выше пример кода, используя точный синтаксис, который я нашел как минимум в 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.

Это просто случай недавнего (i sh) Django обновления, которое сделало этот синтаксис ненужный? Это кажется наиболее вероятным объяснением, но поскольку оно неясно и я не подтвердил это, я спрашиваю здесь. Или есть другое объяснение этой разницы?

Спасибо!

...