Поля модели Django – распространенные случаи использования и как они работают
Поля модели Django определяют структуру базы данных в веб-приложении Django. Использование этого важного компонента обеспечит организованность вашей работы и поможет вам делать меньше ошибок в коде.
В этой статье будут обсуждаться некоторые распространенные поля модели Django и способы их использования в вашем коде.
Чтобы получить максимальную пользу от этой статьи, вам необходимо иметь хотя бы базовые знания Django и понимать, как работает объектно-ориентированное программирование.
Что такое поле модели?
Поле модели — это тип данных, в котором хранятся данные определенного типа. Каждое поле модели представляет определенные данные, такие как числа, даты, текст или даже связи с другими моделями.
Поля содержат встроенные проверки для определенных типов данных. Таким образом, IntegerField не будет принимать, например, буквы алфавита. Каждая область специфична для своей цели.
Общие поля модели Django
Вам необходимо импортировать модуль моделей из базы данных Django, чтобы использовать поля Django. Это гарантирует, что тип данных, который вы храните в столбце базы данных, четко определен.
В этом разделе будут обсуждаться общие типы полей модели Django и способы их использования.
Поле модели CharField
В этом поле хранятся символы или текстовые строки короткой и средней длины, что делает его подходящим для хранения атрибута, такого как имя. CharField
имеет параметр max_length
, который необходимо указывать каждый раз, когда вы используете это поле. Но если вы не укажете длину поля, по умолчанию она будет равна 255 символам.
Ниже приведен пример использования CharField в вашем коде:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=20)
В приведенном выше фрагменте кода max_length
устанавливает максимальную длину атрибута name равным 20 символам.
Поле модели DateField
В этом поле хранятся даты вашей модели и имеется два дополнительных параметра (auto_now
и auto_now_add
). Параметр auto_now
устанавливает дату каждый раз, когда вы меняете или обновляете данные, а auto_now_add
устанавливает дату поля только при создании данных.
Ниже приведен пример использования поля даты:
from django.db import models
class Product(models.Model):
date_created = models.DateField(auto_now_add=True)
date_updated = models.DateField(auto_now=True)
В приведенном выше фрагменте кода модуль продукта имеет два поля DateField
. Один устанавливает дату создания данных, а другой — дату обновления данных.
Поле модели DateTimeField
В этом поле хранится информация о дате и времени в модели. Как и DateField
, DateTimeField
также имеет два параметра (auto_now
и auto_now_add
). Они имеют ту же функцию, за исключением того, что в этом поле также задается время.
Поле модели DecimalField
В этом поле хранятся десятичные числа в базе данных. Вы можете использовать его для хранения числовых значений, таких как цена, вес и рост.
Он имеет два параметра, которые необходимо указать при его использовании. Они включают:
max_digit
: это общее количество цифр, разрешенное в номере. Он включает в себя все цифры слева и справа от десятичной точки. Это число должно быть больше или равноdecimal_places
.decimal_places
: это количество цифр справа от десятичной точки.
Вот пример того, как хранить данные в DecimalField
:
from django.db import models
class Product(models.Model):
price = models.DecimalField(max_digits=6, decimal_places=2)
В приведенном выше фрагменте кода количество цифр по обе стороны от десятичной точки равно 6. В то же время количество десятичных знаков равно 2. Следовательно, ваша программа может хранить только цены типа $2100,00.
Поле модели BooleanField
В этом поле хранятся логические значения. С этим полем можно выполнять простые двоичные операции.
Например:
from django.db import models
class Product(models.Model):
add_to_cart = models.BooleanField(default=False)
В приведенной выше модели продукта для BooleanField
установлено значение по умолчанию False
, что означает, что продукты по умолчанию находятся за пределами вашей корзины. Это также означает, что вы можете в любое время нажать кнопку, чтобы добавить или удалить продукт из корзины.
Поле модели EmailField
EmailField — это специализированная форма CharField
, в которой хранятся адреса электронной почты. Когда вы используете это поле, оно гарантирует, что введенное вами значение является действительным адресом электронной почты. В противном случае он возвращает ошибку.
Вот как использовать это поле в вашем проекте:
from django.db import models
class Customer(models.Model):
email = models.EmailField()
Вышеупомянутая программа гарантирует, что ваш клиент введет действительный адрес электронной почты в базу данных.
Поле модели TextField
TextField хранит большие объемы текстовых данных. Это поле полезно при хранении текстовых данных, длина которых слишком велика для CharField
. Он может обрабатывать длинные тексты, такие как абзацы и даже целые документы.
Вот пример того, как вы можете использовать это поле:
from django.db import models
class Product(models.Model):
comments = models.TextField()
В приведенном выше примере модель продукта имеет текстовое поле с именем 'Comments'
. В этом поле будут храниться комментарии покупателя к товарам.
Поле модели IntegerField
В этом поле хранятся целые значения в виде целых чисел. Эти значения варьируются от -2147483648 до 0 для отрицательных целых чисел и от 0 до 2147483647 для положительных целых чисел. Таким образом, он может хранить любое целочисленное значение, как положительное, так и отрицательное.
В соответствии с потребностями вашего проекта вы можете ограничить это поле для хранения только положительного или отрицательного значения, используя PositiveIntegerField
или NegativeIntegerField
соответственно.
Ниже приведен пример хранения данных в IntegerField
:
from django.db import models
class Product(models.Model):
available_quantity = models.PositiveIntegerField()
В этом примере в модели есть поле, в котором хранится количество доступных продуктов. PositiveIntegerField
гарантирует, что доступное количество является неотрицательным целым числом и в поле могут быть только допустимые количества.
Поле модели TimeField
TimeField — это поле, в котором хранится информация о времени в вашей модели. Он имеет два параметра, как и DateField
.
Вот пример использования этого поля:
from django.db import models
class Order(models.Model):
time_placed = models.TimeField(auto_now_add=True)
В приведенном выше примере поле time_placed
автоматически отображает текущее время при появлении нового заказа.
Поле модели ForeignKeyField
Тип поля ForeignKey
создает связь many-to-one между двумя моделями. Это поле полезно, когда одна модель (дочерняя модель) должна ссылаться на другую (родительскую модель). Он имеет два обязательных параметра: класс, к которому относится модель, и параметр on_delete
.
Ниже приведен пример использования ForeignKey
:
from django.db import models
class Customer(models.Model):
email = models.EmailField()
class Order(models.Model):
order_number = models.CharField(max_length=10)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
ForeignKey
связывает каждый заказ с конкретным клиентом в приведенном выше фрагменте кода. Это также позволяет одному клиенту связать множество заказов. Опция on_delete
указывает, что если вы удалите указанного клиента, все заказы, относящиеся к этому клиенту, также должны покинуть базу данных.
Поле модели ManyToManyField
Этот тип поля представляет отношение Many-to-many между двумя моделями. Это означает, что вы можете связать запись в одной модели со многими записями в другой и наоборот. В этом поле есть обязательный параметр — класс, к которому относится модель.
Вот пример использования этого поля:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=20)
class Order(models.Model):
order_number = models.CharField(max_length=10)
products = models.ManyToManyField(Product)
В приведенном выше коде модель 'order'
имеет поле 'products'
, которое устанавливает связь many-to-many с моделью 'product'
. Таким образом, заказ может содержать несколько продуктов, а продукт может находиться в нескольких заказах.
Поле модели OneToOneField
Тип поля OneToOne
создает связь one-to-one
между двумя моделями. Это означает, что каждая запись в одной модели будет соответствовать ровно одной записи из другой. В этом поле есть один обязательный параметр — класс, к которому относится модель.
Ниже приведен пример использования OneToOneField
:
from django.db import models
class Customer(models.Model):
email = models.EmailField()
class CustomerProfile(models.Model):
customer = models.OneToOneField(Customer, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=15)
В приведенном выше примере CustomerProfile
ссылается на клиента через OneToOneField
. Это гарантирует, что каждый Клиент может иметь ровно один CustomerProfile
и каждый CustomerProfile
связан только с одним CustomerProfile
. Дополнительный параметр on_delete=models.CASCADE
просто указывает программе удалять CustomerProfile
при каждом удалении клиента.
Заключение
Поля модели Django позволяют вам создавать эффективные структуры данных для ваших веб-приложений. Типы полей помогают исключить человеческие ошибки, определяя тип данных в определенном поле.
В этой статье вы познакомились с некоторыми распространенными типами полей в Django и узнали, как их использовать для хранения данных. По мере того, как вы продолжаете создавать свои проекты Django, знания, полученные в результате понимания и реализации этих полей модели, будут иметь неоценимое значение для создания надежных приложений для ваших пользователей.