Почему метод save () имеет другой метод save () с супер в модели django - PullRequest
0 голосов
/ 04 марта 2020

Я создаю модели, где я немного путаюсь с тем, что save () имеет другой метод сохранения с супер-ключевым словом, поэтому два метода save () полезны для объяснения.

    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().save(*args, **kwargs)  # Call the "real" save() method.
            do_something_else()

1 Ответ

1 голос
/ 04 марта 2020

Метод save, который фактически выполняет всю работу с базой данных, определен в models.Model.save. Ваш класс Blog переопределяет метод save; когда вы вызываете Blog().save(), он просто выполняет все, что есть в вашем Blog.save методе. Это не сделало бы никакой реальной работы по записи в базу данных.

Чтобы сделать что-то свое, изобретенное в вашем Blog.save методе , а также выполнить весь код, определенный в models.Model.save, вам нужно явно вызвать реализацию save родителя. Что и делает super().save().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...