Как вызвать метод djangos get_absolute_url? - PullRequest
1 голос
/ 18 января 2020

Я занимаюсь разработкой веб-приложения Django, я начал использовать Class View и использовал метод get_absolute_url , не зная, как он запускается. Я проверил документацию Django, к сожалению, ничего не смог найти по этому поводу. Может кто-нибудь объяснить? Похоже, что при создании пользователя метод get_absolute_url запускается автоматически.

1 Ответ

0 голосов
/ 18 января 2020

Он вызывается представлениями на основе классов, такими как CreateView [Django -doc] и UpdateView [Django -doc] и другие представления, использующие ModelFormMixin mixin [Django -doc] .

Этот миксин переопределяет get_success_url(..) метод [Django -doc] следующим образом:

Определяет URL-адрес для перенаправления при успешной проверке формы. Возвращает django.views.generic.edit.ModelFormMixin.success_url, если оно предоставлено; в противном случае попытается использовать get_absolute_url() объекта .

Так что если вы не предоставите атрибут success_url в своем представлении или не переопределите get_success_url метод зрения самостоятельно. Django будет использовать метод get_absolute_url() объекта, который вы построили, обновили и т. Д. c. в представлении. Это реализовано как [GitHub] :

    def get_success_url(self):
        """Return the URL to redirect to after processing a valid form."""
        if self.success_url:
            url = self.success_url.format(**self.object.__dict__)
        else:
            try:
                url = <b>self.object.get_absolute_url()</b>
            except AttributeError:
                raise ImproperlyConfigured(
                    "No URL to redirect to.  Either provide a url or define"
                    " a get_absolute_url method on the Model.")
        return url

URL-адрес succes используется для перенаправления в случае успешного POST-запроса , Например, форма, которую вы заполнили в CreateView, является действительной и привела к созданию записи в базе данных.

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