Что касается синтаксиса для переопределения метода 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 обновления, которое сделало этот синтаксис ненужный? Это кажется наиболее вероятным объяснением, но поскольку оно неясно и я не подтвердил это, я спрашиваю здесь. Или есть другое объяснение этой разницы?
Спасибо!