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

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

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

Модели для начинающих

В этом разделе представлен обзор того, как определяется модель, и некоторые из наиболее важных полей и аргументы поля.

Согласно официальному стилю программирования, 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 использует типы классов полей для определения ряда вещей:

  • Тип столбца, который указывает базе данных, какие данные должны быть сохранены (например: INTEGERVARCHARTEXT).

  • Компонент 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

Есть много других вариантов - вы можете просмотреть в документации.


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

Понравилась задача, тест или урок? Поставьте лайк, поддержите курс. Ваша поддержка очень важна для нас.

null: Если значение TrueDjango будет хранить пустые значения, как NULL, в базе данных для полей, где это уместно (CharField вместо этого сохранит пустую строку)... 

В БД в поле CharField в данной ситуации сохранит пустое значение а не пустую строку. А вот при blank=True действительно сохраниться пустая строка. 

@Евгений_Куликов, Вы правы, исправили лекцию.

@Илья_Перминовblank и null - это довольно туманная для части людей тема. Очень часто в проектах народ эти значения ставит по делу и без дела (просто бездумно копируя эти значения из других источников).

  • Тип столбца, который указывает базе данных , какие данные должны быть сохранены (например. INTEGER , VARCHAR , TEXT ).

@Георгий_Тимофеев, спасибо, исправил.

Здравствуйте.

По данной ссылке:  "Согласно официальному стилю программирования, ...."

Можно увидеть вот это:

 

У вас далее идет вот это:

 

Дак всё таки это корректно или нет?

@Максим_Михеев, спасибо за замечание, исправил.

@Дмитрий_Селезнев, Аналогично надо исправить в 3.2.3 в разделе "Методы моделей"

@Максим_Михеев, исправили, спасибо за помощь.