Ответ
Чтобы Django не управлял таблицей для модели, необходимо в её внутреннем классе Meta
установить атрибут managed = False
.
Это полезно в следующих случаях:
- Для работы с уже существующими таблицами или представлениями (views), которые управляются вне Django.
- Для создания моделей-прокси над сложными SQL-запросами.
- Для интеграции с legacy-базами данных.
Пример:
from django.db import models
class DatabaseView(models.Model):
# Поля модели должны соответствовать столбцам представления
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255)
total = models.DecimalField(max_digits=10, decimal_places=2)
class Meta:
# Указываем Django, что он не должен создавать, изменять или удалять
# таблицу для этой модели. Команда migrate проигнорирует её.
managed = False
# Явно указываем имя существующей таблицы или представления
db_table = 'my_existing_database_view'
Важные моменты:
- При
managed = False
вы несёте полную ответственность за создание и обновление схемы таблицы. - Django-миграции не будут генерироваться для таких моделей.