Поля модели

Field

class django.db.models.Field(**kwargs)

Базовый класс для полей модели

  • blank=False - булево, поле может хранить пустое значение
  • choices=None - список значений, которые может хранить поле
  • default=NOT_PROVIDED - значение поля по умолчанию
  • db_column=None - строка, имя поля таблицы, если не задано, будет использоваться имя поля модели
  • db_index=False - булево, создавать индекс для поля
  • editable=True - булево, пле редактируемо
  • help_text=’’ - строка, доп описание
  • max_length - число, максимальная длина поля
  • null=False - булево, поле может хранить значение null
  • primary_key=False - булево, поле является первичным ключом
  • unique=False - булево, значения в поле уникальны
  • unique_for_date=None - имя поля модели (DateTimeField или DateField) относительно которых данное поле уникально
  • unique_for_month=None - имя поля модели (DateTimeField или DateField) относительно которых данное поле уникально
  • unique_for_year=None - имя поля модели (DateTimeField или DateField) относительно которых данное поле уникально
  • verbose_name=None - имя поля
  • auto_created=False
  • error_messages=Non
  • db_tablespace=None
  • name=None
  • rel=None
  • serialize=True
  • validators=[]

AutoField

class django.db.models.AutoField

Счетчик

BigIntegerField

class django.db.models.BigIntegerField

64-разрядное, длинное число.

BooleanField

class django.db.models.BooleanField

Логическое поле

is_done = models.BooleanField(
    default=False,
    db_index=True,
    verbose_name="done",
)

CharField

class django.db.models.CharField

Строковое поле

Наследник Field

Обязательные поля:

  • max_length - число, максимальное количесвто символов
  • unique - булево, поле уникально
  • unique_for_date - поле, для которого это поле уникально
  • verbose_name - название поля
name = models.CharField(
    max_length=32,
    unique=True,
    verbose_name="name",
    unique_for_date="pubdate",
)

DateField

class django.db.models.DateField(**kwargs)

Поле с датой

Наследник Field

  • auto_now=False - булево, автоматический прописывать текущее время при сохранении
  • auto_now_add=False - булево, автоматический прописывать текущее время при добавлении
class Good(models.Model):

    updated = models.DateField(auto_now=True)

DateTimeField

class django.db.models.DateTimeField

Поле с датой и временем

Наследник DateField

created = models.DateField(auto_now_add=True)
updated = models.DateField(auto_now=True)

EmailField

class django.db.models.EmailField(**kwargs)

Поле с электронной почтой

Наследник CharField

  • max_length = 254
email = models.EmailField()

FileField

class django.db.models.FileField(**kwargs)

Поле для хранения файла любого типа

  • upload_to - строка, путь к папке куда грузить файлы
name

Путь к файлу, относитльно MEDIA_ROOT

size

Размер файла в байтах

url

Интернет адрес файла

FloatField

class django.db.models.FloatField

Число с плавающей точкой

GenericIPAddressField

class django.db.models.GenericIPAddressField

Поле с IPv4 или IPv6 адресом

ImageField

class django.db.models.ImageField(**kwargs)

Поле для хранения изображений

Требует установленной библиоткеи pillow

  • upload_to - строка, путь к папке куда грузить файлы
  • width_field - имя поля модели, где будет храниться ширина изображения
  • height_field - имя поля модели, где будет храниться высота изображения
image = models.ImageField(upload_to='images/')
image = models.ImageField(upload_to='images/%Y/%m/%d')
thumbnail_width = models.PositiveSmallIntegerField()
thumbnail_height = models.PositiveSmallIntegerField()
thumbnail = models.ImageField(
    upload_to='thumbnails/',
    width_field='thumbnail_width',
    height_field='thumbnail_height',
)
obj = SomeModel.objects.get()
# obj.thumbnail.url
height

Высота картинки

name

Путь к файлу, относитльно MEDIA_ROOT

size

Размер файла в байтах

url

Интернет адрес файла

width

Высота картинки

delete(save=True)

Удаляет выбранный файл.

Параметр save указывает, сохранять ли модель после удаления файла.

class SomeModel(models.Model):

    def save(self, *args, **kwargs):
        this_record = SomeModel.objects.get()
        if this_record.thumbnail != self.thumbnail:
            this_record.thumbnail.delete(save=False)
        super().save(*args, **kwargs)

    def delete(self, *args, **kwargs):
        self.thumbnail.delete(save=False)
        super().delete(*args, **kwargs)

IntegerField

class django.db.models.IntegerField

32-разрядное, обычное число

from django.core.validators import (
    MinValueValidator,  MaxValueValidator)

CATEGORIES = (
    (1, "car"),
    (2, "house"),
)

class Good(models.Model):

    category = models.IntegerField(
        choices=CATEGORIES,
        default=1,
        db_index=True,
    )

    discount = models.IntegerField(
        validators=[MinValueValidator(0),
                    MaxValueValidator(100)])

IPAddressField

class django.db.models.IPAddressField

Поле с IPv4 адресом

PositiveIntegerField

class django.db.models.PositiveIntegerField

32-разрядное, положительное число

PositiveSmallIntegerField

class django.db.models.PositiveSmallIntegerField

16-разрядное положительное число

SlugField

class django.db.models.SlugField(**kwargs)

Короткий заголовок или название, которое включает только символы латиницы, цифры, дефисы и символы подчеркивания.

Наследник CharField

  • max_length = 50
  • db_index = True
from django.utils.text import slugify

class Image(models.Model):

    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, blank=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Image, self).save(*args, **kwargs)

SmallIntegerField

class django.db.models.SmallIntegerField

16-разрядное положительное число

TextField

class django.db.models.TextField

Текстовое поле

Наследник Field

description = models.TextField()

TimeField

class django.db.models.TimeField

Поле со временем

URLField

class django.db.models.URLField(**kwargs)

Поле с интернет адресом

Наследник CharField

  • max_length = 200