• en
  • Language: ru
  • Documentation version: 2.0

6. Как добавить модель для представления базы данных?

Представление базы данных - это объект в базе данных с возможностью поиска, который определяется запросом. Хотя представление не хранит данные, некоторые называют представления «виртуальными таблицами», вы можете запрашивать представление так же, как и таблицу. Представление может объединять данные из двух или более таблиц, используя соединения, а также просто содержать подмножество информации. Это делает их удобными для абстрагирования, или скрытия, сложных запросов.

В нашем SqliteStuio мы видим 26 таблиц и ни одного представления.

../_images/before_view.png

Давайте создадим простое представление.:

create view temp_user as
    select id, first_name from auth_user;

После создания представления мы видим 26 таблиц и 1 представление.

../_images/after_view.png

Мы можем создать связанную с ней модель в нашем приложении, используя managed = False и << 1 >>>:

class TempUser(models.Model):
    first_name = models.CharField(max_length=100)

    class Meta:
        managed = False
        db_table = "temp_user"

// We can query the newly created view similar to what we do for any table.
>>> TempUser.objects.all().values()
<QuerySet [{'first_name': 'Yash', 'id': 1}, {'first_name': 'John', 'id': 2}, {'first_name': 'Ricky', 'id': 3}, {'first_name': 'Sharukh', 'id': 4}, {'first_name': 'Ritesh', 'id': 5}, {'first_name': 'Billy', 'id': 6}, {'first_name': 'Radha', 'id': 7}, {'first_name': 'Raghu', 'id': 9}, {'first_name': 'Rishabh', 'id': 10}, {'first_name': 'John', 'id': 11}, {'first_name': 'Paul', 'id': 12}, {'first_name': 'Johny', 'id': 13}, {'first_name': 'Alien', 'id': 14}]>
// You cannot insert new reord in a view.
>>> TempUser.objects.create(first_name='Radhika', id=15)
Traceback (most recent call last):
...
django.db.utils.OperationalError: cannot modify temp_user because it is a view

Для получения информации о работе союза посетите сайт: http://books.agiliq.com/projects/django-admin-cookbook/en/latest/database_view.html?highlight=view