Модели для начинающих
В этом разделе представлен обзор того, как определяется модель, и некоторые из наиболее важных полей и аргументы поля.
Согласно официальному стилю программирования, Django рекомендует использовать следующий порядок при написании моделей:
- Все поля модели
- Кастомные менеджеры
- Мета классы
- Методы класса (
__str__,get_absolute_url(), и другие) - Другие кастомные методы
Обычно мы используем следующую структуру моделей:
class Modelname(models.Model):
#Fields
field_name = models.CharField(max_length = , help_text = , choices = , Null etc)
#Metadata
class Meta:
ordering = ['field_name']
#Methods
def __str__(self):
return '<readable_name>'
Определение модели
Модели обычно определяются в приложении в файле models.py.
Они реализуются как подклассы django.db.models.Model, и могут включать поля, методы и метаданные.
Общие типы полей
Каждое поле в вашей модели должно быть экземпляром Field соответствующего класса. Django использует типы классов полей для определения ряда вещей:
-
Тип столбца, который указывает базе данных, какие данные должны быть сохранены (например:
INTEGER,VARCHAR,TEXT). -
Компонент HTML по умолчанию, используемый при создании поля формы (например:
<input type="text">,<select>). -
Минимальные требования к валидации, используемые в администрировании Django и в автоматически сгенерированных формах.
Для определения моделей мы можем использовать следующие типы полей:
-
BinaryField(): хранит бинарные данные. -
BooleanField(): хранит значениеTrueилиFalse. -
NullBooleanField(): хранит значениеTrueилиFalseилиNull. -
DateField(): хранит дату. -
TimeField(): хранит время. -
DateTimeField(): хранит дату и время. При применении параметраauto_now_add=Trueдата будет сохраняться автоматически во время создания объекта. При применении параметраauto_now=Trueдата будет обновляться автоматически во время сохранения объекта. -
DurationField(): хранит период времени. -
AutoField(): хранит целочисленное значение, которое автоматически инкрементируется, обычно применяется для первичных ключей. -
BigAutoField(): хранит 64-битное целочисленное значение, но в отличие отAutoField()гарантирует, что число входит в диапазон от 1 до 9223372036854775807. -
SmallAutoField(): хранит 16-битное целочисленное значение в диапазоне от 1 до 32767. -
BigIntegerField(): представляет число - значение типа Number, которое укладывается в диапазон от -9223372036854775808 до 9223372036854775807. В зависимости от выбранной СУБД диапазон может немного отличаться. -
DecimalField(decimal_places=X, max_digits=Y): представляет значение типа Number, которое имеет максимум X разрядов и Y знаков после запятой. -
FloatField(): хранит, значение типа Number, которое представляет число с плавающей точкой. -
IntegerField(): хранит значение типа Number, которое представляет целочисленное значение. -
PositiveIntegerField(): хранит значение типа Number, которое представляет положительное целочисленное значение (от 0 до 2147483647). -
PositiveBigIntegerField(): хранит значение типа Number, которое представляет положительное 64-битное целочисленное значение (от 0 до 9223372036854775807). -
PositiveSmallIntegerField(): хранит значение типа Number, которое представляет небольшое положительное целочисленное значение (от 0 до 32767). -
SmallIntegerField(): хранит значение типа Number, которое представляет небольшое целочисленное значение (от -32768 до 32767). -
CharField(max_length=N): хранит строку длиной не более N символов.max_lengthобязательный параметр. -
TextField(): хранит строку неопределенной длины. -
EmailField(): хранит строку, которая представляет email-адрес. Значение автоматически валидируется встроенным валидаторомEmailValidator. -
FileField(): хранит строку, которая представляет имя файла. -
FilePathField(): хранит строку, которая представляет путь к файлу длиной в 100 символов. -
ImageField(): хранит строку, которая представляет данные об изображении. -
GenericIPAddressField(): хранит строку, которая представляет IP-адрес в формате IP4v или IP6v. -
SlugField(): хранит строку, которая может содержать только буквы в нижнем регистре, цифры, дефис и знак подчеркивания. -
URLField(): хранит строку, которая представляет валидный URL-адрес. -
UUIDField(): хранит строку, которая представляет UUID-идентификатор. -
JSONField(): хранит данные в формате JSON.
Общие аргументы полей
Следующие общие аргументы могут использоваться при объявлении многих / разных типов полей:
-
help_text: Предоставляет текстовую метку для HTML-форм (например, на сайте администратора), как описано выше. -
verbose_name: Удобочитаемое имя для поля, используемого в поле метки. Если не указано, Django выведет по умолчанию подробное название от имени поля. -
default: Значение по умолчанию для поля. Это может быть значение или вызываемый объект, и в этом случае объект будет вызываться каждый раз, когда создаётся новая запись. -
null: Если значениеTrue, Django будет хранить пустые значения, какNULL. По умолчанию используется значениеFalse. -
blank: Если значениеTrue, поле может быть пустым в ваших формах. По умолчанию используется значениеFalse, что означает, что проверка формы Django заставит вас ввести значение. Это часто используется сnull = True, потому что если вы хотите разрешить пустые значения, вы также хотите, чтобы база данных могла представлять их соответствующим образом. -
choices: Группа вариантов для этого поля. Если это предусмотрено, по умолчанию соответствующий виджет формы будет полем выбора с этими вариантами вместо стандартного текстового поля. -
primary_key: Если значениеTrue, задаёт текущее поле в качестве первичного ключа для модели (первичный ключ - это специальный столбец базы данных, предназначенный для однозначной идентификации всех разных записей таблицы). Если в качестве первичного ключа не указано поле, Django автоматически добавит для этой цели полеid. -
unique: Это означает, что значения в поле должны быть уникальными для каждой записи в базе данных. Если в таблице уже есть записи с дублирующимся значением, то при попытке создания или сохранения записи с таким же значением в поле возникнет исключениеIntegrityError. По умолчаниюunique=False
Есть много других вариантов - вы можете просмотреть в документации.