• ORM (Object-Relational Mapping): Позволяет взаимодействовать с базой данных, используя объекты Python (модели), вместо написания SQL-запросов напрямую.

  • Модель: Класс Python, наследующийся от django.db.models.Model. Представляет таблицу в базе данных.

  • Поле модели: Атрибут класса модели. Представляет столбец в таблице.

  • Экземпляр модели: Объект класса модели. Представляет строку в таблице.

    # models.py  
    from django.db import models  
     
    class Person(models.Model):  
        first_name = models.CharField(max_length=50, verbose_name="Имя")  
        last_name = models.CharField(max_length=50,   
        verbose_name="Фамилия")  
        age = models.IntegerField(null=True, blank=True,   
        verbose_name="Возраст")  
     
        def __str__(self):  
              return f"{self.first_name} {self.last_name}"  
  • Типы полей :

    • CharField: Текстовое поле (обязателен max_length).

    • TextField: Большое текстовое поле.

    • IntegerField: Целое число.

    • BooleanField: Логическое значение (True/False).

    • DateTimeField: Дата и время.

    • DateField: Дата.

    • TimeField: Время.

    • DecimalField: Десятичное число с фиксированной точностью (обязательны max_digits, decimal_places).

    • EmailField: Строка для email (с базовой валидацией).

    • FileField: Поле для загрузки файлов (требует настройки MEDIA_ROOT и MEDIA_URL).

    • ImageField: Специализированное поле для изображений (наследуется от FileField, требует Pillow).

    • ForeignKey: Связь “один ко многим” с другой моделью.

    • ManyToManyField: Связь “многие ко многим”.

    • OneToOneField: Связь “один к одному”.

    • AutoField: Автоинкрементное целочисленное поле (обычно первичный ключ id, добавляется автоматически).

    • SlugField: Поле для хранения “слага” (короткой метки для URL).

    • URLField: Поле для хранения URL (с валидацией).

    • UUIDField: Поле для хранения UUID.

  • Параметры, поддерживаемые полями всех типов:

    • verbose_name - “человеческое” название поля, которое будет выводиться на веб-страницах. Если не указано, то будет выводиться имя поля;

    • help_text - дополнительный поясняющий текст, выводимый на экран. По умолчанию - пустая строка. Содержащиеся в этом тексте специальные символы HTML не преобразуются в литералы и выводятся как есть. Это позволяет отформатировать поясняющий текст НТМL-тегами;

    • default - значение по умолчанию, записываемое в поле, если в него явно не было занесено никакого значения. Может быть указано двумя способами:

      Как обычное значение любого неизменяемого типа:

      is_active = models.BooleanField(default=True)  

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

      Как ссылка на функцию, вызываемую при создании каждой новой записи и возвращающую в качестве результата заносимое в поле значение:

      def is_active_default():  
          return not is_all_posts_passive  
      ...  
      ...  
      is_active = models.BooleanField(default=is_active_default)  
    • unique - если True, то в текущее поле может быть занесено только уникальное в пределах таблицы значение (уникальное поле). При попытке занести значение, уже имеющееся в том же поле другой записи, будет возбуждено исключение**IntegrityError** из модуля django.db. Если поле помечено как уникальное, по нему автоматически будет создан индекс. Поэтому явно задавать для него индекс не нужно. Если False, то текущее поле может хранить любые значения. Значение по умолчанию - False;

    • unique_for_date - если в этом параметре указать представленное в виде строки имя поля даты (DateField) или даты и времени (DateTimeField), то текущее поле может хранить только значения, уникальные в пределах даты, которая хранится в указанном поле. Пример:

      title = models.CharField(max_length=50, unique_for_date='published')  
      published = models.DateTimeField()  

      В этом случае Django позволит сохранить в поле title только значения, уникальные в пределах даты, хранящейся в поле published;

    • unique_for_month - то же самое, что и unique_for_date, но в расчет принимается не всё значение даты, а лишь месяц;

    • unique_for_year - то же самое, что и unique_for_date, но в расчет принимается не всё значение даты, а лишь год;

    • null - если True, то поле в таблице базы данных может хранить значение null и, таким образом, являться необязательным к заполнению. Если False, то поле в таблице должно иметь какое-либо значение, хотя бы пустую строку. Значение по умолчанию - False.


      Отметим, что у строковых и текстовых полей, даже обязательных к заполнению (т.е. при их объявлении параметру null было присвоено значение False), вполне допустимое значение - пустая строка.
      Если сделать поля необязательными к заполнению, задав True для параметра null, то они вдобавок к этому могут хранить значение null. Оба значения фактически представляют отсутствие каких-либо данных в поле, и эту ситуацию придется как-то обрабатывать.
      Поэтому, чтобы упростить обработку отсутствия значения в таком поле, его не стоит делать необязательным к заполнению. Параметр null затрагивает только поле таблицы, но не поведение Django. Даже если какое-то поле присвоением параметру значения True было помечено как необязательное, фреймворк по умолчанию все равно не позволит занести в него пустое значение;

    • blank - если True, то Django позволит занести в поле пустое значение, тем самым сделав поле необязательным к заполнению, если False - не позволит. По умолчанию - False. Параметр blank задает поведение самого фреймворка при выводе на экран веб-форм и проверке введенных в них данных. Если этому параметру дано значение True, то Djangoпозволит занести в поле пустое значение (например, для строкового поля - пустую строку), даже если это поле было помечено как обязательное к заполнению (параметру null было дано значение False);

    • db_index - если True, то по текущему полю в таблице будет создан индекс, если False - не будет. По умолчанию - False

    • primary_key - если True, то текущее поле станет ключевым. Такое поле будет помечено как обязательное к заполнению и уникальное (параметру null неявно будет присвоено значение False, а параметру unique - True), и по нему будет создан ключевой индекс. В модели может присутствовать только одно ключевое поле! Если False, то поле не будет преобразовано в ключевое. Значение по умолчанию - Fаlsе. Если ключевое поле в модели не было задано явно, сам фреймворк создаст в ней целочисленное автоинкрементное ключевое поле с именем id;

    • editаblе - если True, то поле будет выводиться на экран в составе формы, если False - не будет (даже если явно создать его в форме) . По умолчанию - True;

    • db_column - имя поля таблицы в виде строки. Если не указано, то поле таблицы получит такое же имя, что и поле модели.

    • auto_now=True/False: (Для DateField/DateTimeField) Автоматически обновлять поле текущей датой/временем при каждом сохранении объекта (.save()).
    • auto_now_add=True/False: (Для DateField/DateTimeField) Автоматически устанавливать поле в текущую дату/время при первом создании объекта.
    • Для связей (ForeignKey, OneToOneField):
      • on_delete: Действие при удалении связанного объекта (models.CASCADE, models.PROTECT, models.SET_NULL, models.SET_DEFAULT, models.DO_NOTHING, models.SET(...)).
      • related_name: Имя для обратной связи от связанной модели.

〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰