Поля модели

Field

class 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 AutoField

Счетчик

BigIntegerField

class BigIntegerField

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

BooleanField

class BooleanField

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

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

CharField

class 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 DateField(**kwargs)

Поле с датой

Наследник Field

  • auto_now=False - булево, автоматический прописывать текущее время при сохранении

  • auto_now_add=False - булево, автоматический прописывать текущее время при добавлении

class Good(models.Model):

    updated = models.DateField(auto_now=True)

DateTimeField

class DateTimeField

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

Наследник DateField

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

EmailField

class EmailField(**kwargs)

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

Наследник CharField

  • max_length = 254

email = models.EmailField()

FileField

class FileField(**kwargs)

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

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

def upload_to(instance, filename):
    """
    возвращает путь до загружаемого файла
    """
    return os.path.join('blog', filename)

file_field = model.FileField(upload_to=upload_to)
name

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

size

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

url

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

FloatField

class FloatField

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

GenericIPAddressField

class GenericIPAddressField

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

ImageField

class 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 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 IPAddressField

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

Warning

deprecated, use GenericIPAddressField

PositiveIntegerField

class PositiveIntegerField

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

PositiveSmallIntegerField

class PositiveSmallIntegerField

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

SlugField

class 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 SmallIntegerField

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

TextField

class TextField

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

Наследник Field

description = models.TextField()

TimeField

class TimeField

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

URLField

class URLField(**kwargs)

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

Наследник CharField

  • max_length = 200