Атрибут db_table
Атрибут db_table применяется внутри класса Meta модели Django и позволяет задать пользовательское имя для таблицы в базе данных. По умолчанию Django автоматически генерирует имя таблицы, используя формат appname_modelname, но с помощью db_table вы можете переопределить это поведение. Этот атрибут принимает строковое значение, которое будет использоваться как имя таблицы при выполнении миграций.
Синтаксис
class MyModel(models.Model):
# поля модели
class Meta:
db_table = "custom_table_name"
Пример
Давайте создадим модель Article и укажем для неё имя таблицы blog_posts вместо автоматического myapp_article:
from 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. Вы можете убедиться в этом, подключившись к базе данных и выполнив запрос:
SELECT table_name FROM information_schema.tables WHERE table_name = 'blog_posts';
Результат выполнения кода:
"blog_posts"
Пример
Рассмотрим ситуацию, когда у вас уже существует таблица в базе данных, и вы хотите связать её с моделью Django. В этом случае атрибут db_table позволяет указать существующее имя таблицы:
from 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. Вы можете выполнить запрос к этой модели и убедиться, что данные извлекаются из указанной таблицы:
from myapp.models import Category
categories = Category.objects.all()
for category in categories:
print(category.name)
Результат выполнения кода:
"Technology"
"Health"
"Education"
Смотрите также
-
атрибут
ordering,
который задаёт сортировку записей по умолчанию -
атрибут
verbose_name,
который задаёт читаемое имя модели в единственном числе -
атрибут
verbose_name_plural,
который задаёт читаемое имя модели во множественном числе -
атрибут
abstract,
который делает модель абстрактной