Как в Django создать модель, для которой не будет создаваться таблица в базе данных

Ответ

Чтобы 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-миграции не будут генерироваться для таких моделей.