Django Models: начальные знания о моделях
Разбираемся что такое и зачем нужны модели в django, где хранятся и как их создать


При разработке веб приложения, важно не только, что визуально видно пользователю, но и как организованы данные.
От структуры данных зависит насколько просто получится внести изменения в проект, а так же с какой скоростью можно получить информацию из базы данных.
Прежде, мы посмотрели что такое Django на простом проекте.
В этой статье разберёмся, как устроена работа с моделями в Django, какие возможности предоставляет этот механизм и как использовать его для описания структуры данных приложения.
Модели (Models) в Django это код, который пишет программист на языке python, чтобы описать структуру будущей таблицы в базе данных.
В моделях задается какие данные существуют в таблице, какие характеристики они имеют и как связаны друг с другом.
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100, verbose_name="Наименование товара")
description = models.TextField(verbose_name="Описание")
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Цена")
def __str__(self):
return self.nameпример модели товара с полями наименование / описание / цена
Модели в django нужны для того, чтобы в одном месте описать структуру таблицы, которая будет создана при помощи Django миграций, а потом постоянно ссылаться в коде на модель для работы с данными используя средства Django ORM.
Модели в django хранятся в файле models.py каждого из приложений, для примера если приложение называется blog, будет такая структура:
Проект Django
│
└── blog/
│
├── __init__.py
├── admin.py
├── apps.py
├── models.py ← Модели приложения blog
├── views.py
├── urls.py
└── tests.pyфайл models.py в приложении django с названием blog
Хранение models.py внутри конретного приложения позволяет иметь описание таблиц рядом с основными местами использования и поддерживать понятную и логичную структуру проекта.
Для большинства случаев одного файла достаточно, однако если файл начинает разрастаться, можно создать вложенную структуру:
blog/
└── models/
├── __init__.py
├── post.py
├── category.py
└── comment.pyпример вложенной структуры для models в приложении django
При вложенной структуре models является папкой, а не файлом.
Чтобы Django распознавал модели, требуется импортировать их в blog/models/__init__.py:
from .post import Post
from .category import Category
from .comment import Commentпример импорта вложенных моделей django в blog/models/__init__.py
Модель в Django создаётся с помощью Python-класса, который наследует функционал от встроенного класса django - models.Model.
Внутри модели объявляются атрибуты, соответствующие полям данных. Каждое поле создаётся с помощью специального класса, например CharField для строк или TextField для текста.
По умолчанию имя таблицы в базе данных сформируется на основе названия приложения и названия модели (например: news_article), но его можно изменить задав db_table = "texts" в class Meta.
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = "news_text"пример кода Model в django
В этом примере модель Article описывает таблицу в базе данных для будущих статей, у которой есть заголовок, содержимое и дата создания.
Django автоматически добавляет первичный ключ - id, если разработчик не определил его самостоятельно.
Поле title дает возможность хранить до 200 знаков, content умещает текст произвольной длины, а created_at автоматически получит дату и время создания строки в базе данных.
Для создания таблицы не требуется знать SQL, все описывается на Python.
Само по себе создание или изменение класса модели не приводит к автоматическому изменению структуры базы данных.
Для синхронизации Python-кода с базой данных в Django используется механизм миграций, про них говорим в специальной статье.
Тема полей в django довольна обширна, детально разбираем в отдельной статье.
Если у вас есть вопросы по моделям в django можете обратиться за консультацией к программисту.





