Django 5 для начинающих

Прогресс по курсу:  9/1004

3.2 Модели в Django и их поля
3 из 11 шагов пройдено
0 из 42 баллов  получено

Модель может иметь произвольное количество полей любого типа - каждый представляет столбец данных, который мы хотим сохранить в одной из наших таблиц базы данных. Каждая запись (строка) базы данных будет состоять из одного значения каждого поля.

Давайте рассмотрим следующую модель:

class Book(models.Model):
    title = models.CharField(max_length=20, help_text='Enter name book')

Наш выше приведённый пример имеет поле, называемое title, типа models.CharField — что означает, что это поле будет содержать строки буквенно-цифровых символов.

Типы полей назначаются с использованием определённых классов, которые определяют тип записи, которая используется для хранения данных в базе данных, а также критерии проверки, которые должны использоваться, когда значения получены из формы HTML (то есть, что составляет действительное значение).

Типы полей также могут принимать аргументы, которые дополнительно определяют, как поле хранится или может использоваться. В этом случае мы даём нашему полю два аргумента: 

  • max_length=20 — Указывает, что максимальная длина значения в этом поле составляет 20 символов.
  • help_text='Enter name book' — предоставляет текстовую метку для отображения, чтобы помочь пользователям узнать, какое значение необходимо предоставить, когда это значение должно быть введено пользователем через HTML-форму.

Имя поля title используется для обращения к нему в запросах и шаблонах.

В полях также есть метка, которая задаётся как аргумент verbose_name, либо выводится путём замены первой буквы имени поля на заглавную и замены любых символов подчёркивания пробелом(например, поле my_field_name будет иметь метку по умолчанию My field name).

Порядок, в котором объявляются поля, будет влиять на их порядок по умолчанию, если модель отображается в форме (например, на сайте администратора), хотя это может быть переопределено.

По умолчанию, все поля обязательны для заполнения, то есть создаются с ограничением NOT NULL

Давайте рассмотрим еще одну модель, она определяет человека Person с именем first_name и фамилией last_name:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name  = models.CharField(max_length=30)

first_name и last_name являются полями модели.

Каждое поле определяется как атрибут класса, и каждый атрибут соответствует столбцу базы данных.

Приведённая выше модель Person создаст такую ​​таблицу базы данных:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);


Если мы не указываем первичный ключ сами, Django его "подсовывает" нам автоматически. То есть если у нас нет поля с аргументом primary_key=True, Django автоматически добавит следующее поле:

id = models.AutoField(primary_key=True)

AutoField — это то же самое, что и IntegerField, но с добавлением новых объектов СУБД сама инкрементирует его.


И напоследок рассмотрим еще одну модель:

class Group(models.Model):
    title = models.CharField(max_length=200, verbose_name='Название')
    slug  = models.SlugField(max_length=255, unique=True, verbose_name='URL имя')
    description = models.TextField(verbose_name='Описание')


Модель содержит три поля:

  • title: Поле заголовка, имеет максимальную длину 200 символов, и имеет имя для поля - Название.
  • slug: Поле слага, имеет максимальную длину 255 символов. Указывает, что поле должно быть уникальным, и имеет имя - URL имя.
  • descriptions: Поле описания категории, имеет имя - Описание.

Если мы например захотим разрешить, чтобы поле descriptions может быть пустым, то укажем:

    description = models.TextField(null=True, verbose_name='Описание')

Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

'Название'

Изменен ilya kutaev

@ilya_kutaev, Спасибо, исправил.