Мы сделали это довольно широко в наших приложениях с MySQL, чтобы обойти ограничение Django для единой базы данных. Наше приложение имеет несколько баз данных, которые находятся в одном экземпляре MySQL. Таким образом, мы можем добиться объединения моделей между базами данных, если мы создали представления для каждой таблицы в «текущей» базе данных.
Что касается вставок / обновлений в представления, в наших случаях использования представление в основном представляет собой "select * from [db.table];". Другими словами, мы не делаем никаких сложных объединений или фильтрации, поэтому триггер вставки / обновления из save () работает нормально. Если ваш сценарий использования требует таких сложных объединений или обширной фильтрации, я подозреваю, что у вас не возникнет никаких проблем для сценариев только для чтения, но могут возникнуть проблемы с вставкой / обновлением. Я думаю, что в MySQL есть некоторые основные ограничения, которые не позволяют вам обновлять представления, которые пересекают таблицы, имеют сложные фильтры и т. Д.
В любом случае, ваш пробег может отличаться, если вы используете СУБД, отличную от MySQL, но Django на самом деле не волнует, находится ли она над физической таблицей или представлением. Это будет СУБД, которая определяет, действительно ли она функционирует так, как вы ожидаете. Как заметил предыдущий комментатор, вы, скорее всего, будете выбрасывать syncdb из окна, хотя мы успешно обошли его с помощью сигнала post-syncdb, который сбрасывает физическую таблицу, созданную Django, и запускает нашу команду "create view ..." Тем не менее, сигнал post-syncdb немного эзотеричен в том, как он запускается, поэтому будьте осторожны с emptor.
РЕДАКТИРОВАТЬ: Конечно, под "post-syncdb signal" я имею в виду "post-syncdb listener"