Метод get_absolute_url

Метод get_absolute_url определяется в модели и возвращает строку с URL-адресом для конкретного экземпляра. Этот метод особенно полезен для генерации ссылок на объекты в шаблонах и административной панели Django. Метод не принимает никаких аргументов и обычно использует функцию reverse для построения URL на основе имени маршрута и параметров объекта.

Синтаксис

pythonfrom django.db import models
from django.urls import reverse

class ModelName(models.Model):
  # поля модели

  def get_absolute_url(self):
    return reverse('url_name', kwargs={'pk': self.pk})

Пример

Давайте создадим модель Article с методом get_absolute_url, который возвращает URL для просмотра статьи:

pythonfrom django.db import models
from django.urls import reverse

class Article(models.Model):
  title = models.CharField(max_length=200)
  content = models.TextField()
  created_at = models.DateTimeField(auto_now_add=True)

  def get_absolute_url(self):
    return reverse('article_detail', kwargs={'pk': self.pk})

Пример

Рассмотрим использование метода get_absolute_url для получения URL конкретной статьи:

pythonfrom myapp.models import Article

# Получаем статью с id=1
article = Article.objects.get(pk=1)

# Получаем абсолютный URL
url = article.get_absolute_url()
print(url)

Результат выполнения кода:

python"/articles/1/"

Пример

Метод get_absolute_url часто используется в шаблонах для создания ссылок на объекты. Рассмотрим пример с использованием альтернативных полей для построения URL:

pythonfrom django.db import models
from django.urls import reverse

class Category(models.Model):
  name = models.CharField(max_length=100)
  slug = models.SlugField(unique=True)

  def get_absolute_url(self):
    return reverse('category_detail', kwargs={'slug': self.slug})

Теперь получим URL для категории:

pythonfrom myapp.models import Category

# Получаем категорию
category = Category.objects.get(slug='django')

# Получаем абсолютный URL
url = category.get_absolute_url()
print(url)

Результат выполнения кода:

python"/categories/django/"

Смотрите также

  • метод save,
    который сохраняет объект в базу данных
  • метод delete,
    который удаляет объект из базы данных
  • метод clean,
    который выполняет валидацию полей модели
  • метод refresh_from_db,
    который обновляет объект из базы данных