Атрибут db_table

Атрибут db_table применяется внутри класса Meta модели Django и позволяет задать пользовательское имя для таблицы в базе данных. По умолчанию Django автоматически генерирует имя таблицы, используя формат appname_modelname, но с помощью db_table вы можете переопределить это поведение. Этот атрибут принимает строковое значение, которое будет использоваться как имя таблицы при выполнении миграций.

Синтаксис

pythonclass MyModel(models.Model):
  # поля модели
  class Meta:
    db_table = "custom_table_name"

Пример

Давайте создадим модель Article и укажем для неё имя таблицы blog_posts вместо автоматического myapp_article:

pythonfrom django.db import models

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

  class Meta:
    db_table = "blog_posts"

  def __str__(self):
    return self.title

После выполнения команды миграции в базе данных будет создана таблица с именем blog_posts. Вы можете убедиться в этом, подключившись к базе данных и выполнив запрос:

pythonSELECT table_name FROM information_schema.tables WHERE table_name = 'blog_posts';

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

python"blog_posts"

Пример

Рассмотрим ситуацию, когда у вас уже существует таблица в базе данных, и вы хотите связать её с моделью Django. В этом случае атрибут db_table позволяет указать существующее имя таблицы:

pythonfrom django.db import models

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

  class Meta:
    db_table = "existing_categories"

  def __str__(self):
    return self.name

Теперь модель Category будет работать с таблицей existing_categories. Вы можете выполнить запрос к этой модели и убедиться, что данные извлекаются из указанной таблицы:

pythonfrom myapp.models import Category

categories = Category.objects.all()
for category in categories:
  print(category.name)

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

python"Technology"
"Health"
"Education"

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

  • атрибут ordering,
    который задаёт сортировку записей по умолчанию
  • атрибут verbose_name,
    который задаёт читаемое имя модели в единственном числе
  • атрибут verbose_name_plural,
    который задаёт читаемое имя модели во множественном числе
  • атрибут abstract,
    который делает модель абстрактной