CharField — Django Models
У CharField есть еще один обязательный аргумент:
Синтаксис
Джанго Модель CharField Объяснение
Refer to the following articles to check how to create a project and an app in Django.
from django.db import models
from django.db.models import Model
# Создайте свои модели здесь.
geeks_field = models.CharField(ax_length = 200 )
Добавьте приложение гиков в INSTALLED_APPS
Теперь, когда мы запускаем команду makemigrations из терминала,
В каталоге geeks будет создана новая папка с именем migrations с файлом с именем 0001_initial.py
# Сгенерировано Django 2.2.5 на 2019-09-25 06:00
from django.db import migrations, models
Таким образом, geeks_field CharField создается при запуске миграций в проекте. Это поле для хранения небольших и больших строк.
Как использовать CharField?
CharField используется для хранения небольших строк в базе данных. Можно сохранить имя, фамилию, адрес и т. Д. CharField должен иметь аргумент max_length для указания максимальной длины строки, которую требуется сохранить. На рабочем сервере после развертывания приложения Django пространство очень ограничено. Поэтому всегда оптимально использовать max_length в соответствии с требованиями поля. Давайте создадим экземпляр CharField, который мы создали, и проверим, работает ли он.
# импорт модели
# из приложения гиков
from geeks.models import GeeksModel
# создание экземпляра
# GeeksModel
geek_object = GeeksModel.objects.create(geeks_field = «GFG is Best» )
Теперь давайте проверим это на административном сервере. Мы создали экземпляр GeeksModel.
Параметры поля
Параметры поля — это аргументы, данные каждому полю для применения некоторого ограничения или передачи определенной характеристики конкретному полю. Например, добавление аргумента null = True в CharField позволит ему хранить пустые значения для этой таблицы в реляционной базе данных.
Вот параметры поля и атрибуты, которые может использовать CharField.
Перевод Django Documentation: Models. Part 1
Доброго времени суток!
Данный топик представляет собой первую часть перевода документации Django, а именно раздела о моделях. Сразу хочу сказать, что я не являюсь профессиональным переводчиком и изначально делал перевод для себя. Все замечания и вопросы просьба писать в комментариях или посылать по хабрапочте. Надеюсь, информация окажется полезной для вас.
_Модели
___Небольшой пример
___Использование моделей
___Поля
_____Типы полей
_____Параметры полей
_____Автоматические первичные ключи
_____Подробные имена полей
Данный документ относится к Django’s SVN релизу, который может значительно отличаться от предыдущих. Старая документация (для Django 1.0) доступна здесь
Модели
Модель является единственным и окончательным источником сведений о ваших данных. Она описывает поведение данных, которые вы храните, и содержит их основные поля. Как правило, каждая модель является представлением одной из таблиц базы данных.
В данном примере определяется класс Person, содержащий поля first_name и last_name:
Copy Source | Copy HTML
from django.db import models
class Person (models.Model):
first_name = models.CharField(max_length= 30 )
last_name = models.CharField(max_length= 30 )
first_name и last_name являются полями нашей модели. Каждое поле определяет атрибут класса, а каждый атрибут в свою очередь представляет собой колонку базы данных.
Вышеприведенный класс Person создаст таблицу базу данных примерно такого вида:
Copy Source | Copy HTML
CREATE TABLE myapp_person (
«id» serial NOT NULL PRIMARY KEY,
«first_name» varchar( 30 ) NOT NULL,
«last_name» varchar( 30 ) NOT NULL
);
Как только вы определили ваши модели, вы должны сообщить Django, что собираетесь использовать их. Делается это с помощью изменения вашего файла настроек, а именно редактирования INSTALLED_APPS, в который нужно добавить имя вашего модуля, содержащего models.py.
Например, если модели вашего приложения находятся в модуле mysite.myapp.models (данная структура создается после выполнения сценария manage.py startapp), нужная нам часть INSTALLED_APPS должна выглядеть так:
После редактирования INSTALLED_APPS не забудьте запустить сценарий syncdb.
Наиболее важной и едиhttp://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.__unicode__
нственно необходимой частью любой модели является список полей базы данных, которые она определяет. Поля задаются атрибутами класса.
Copy Source | Copy HTML
class Musician (models.Model):
first_name = models.CharField(max_length= 50 )
last_name = models.CharField(max_length= 50 )
instrument = models.CharField(max_length= 100 )
class Album (models.Model):
artist = models.ForeignKey( Musician )
name = models.CharField(max_length= 100 )
release_date = models.DateField()
num_stars = models.IntegerField()
Типы полей
Параметры полей
Каждое поле имеет определенный набор характерных аргументов, документированных в справке по полям моделей. Например, CharField (и его подклассы) требует аргумент max_length, который определяет размер поля базы данных VARCHAR, используемый для хранения ваших данных.
docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.__unicode__
Существует также набор общих аргументов, которые доступны для всех типов полей. Все они являются необязательными. Полное описание предоставлено в справке, однако небольшой обзор наиболее часто-используемых мы приведем здесь:
Если значение аргумента True, Django будет сохранять пустые значения в базе данных как NULL. По умолчанию False.
Если значение аргумента True, то поле может быть пустым. По умолчанию False.
Заметим, что blank отличается null. Аргумент null относится только к базам данных, а blank в свою очередь отвечает за проверку ввода. Если поле имеет аргумент blank со значением TRUE, то проверка в docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.defaultинтерфейсе администратора Django будет допускать ввод пустого значения. Если же значение атрибута — False, поле будетhttp://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.default обязательным для заполнения.
Итератор (например, список или кортеж), состоящий из нескольких пар значений, используемых как варианты выбора для данного поля. Если аргумент определен, интерфейс администратора Django будет использовать выпадающий список вместо обычного поля для ввода и ограничит варианты выбора теми, которые заданы.
Список вариантов выбора выглядит примерно так:
Copy Source | Copy HTML
from django.db import models
Значение данного аргумента является значением поля по умолчанию или вызываемый объект (в этом случае вызываемый объект будет вызываться каждый раз при создании нового объекта).
Значение данного аргумента — текст (дополнительная «помощь»), который будет отображаться в интерфейсе администратора в форме объектов после данного поля. Это полезно для документирования, если ваш объект не имеет формы администратора.
Если значение аргумента True, поле будет являться первичным ключом для модели.
Если вы не определите primary_key=True ни для одной из полей вашей модели, Django автоматически добавит IntegerField, чтобы модель имела первичный ключ, поэтому вы можете устанавливать значение primary_key=True для какого-либо поля, только если хотите переопределить стандартное поведение при создании первичного ключа.
Если значение аргумента True, поле должно быть уникальным во всей таблице базы данных.
Напомним, выше приведено лишь краткое описание часто-используемых аргументов полей. Более детально изучить их вы можете здесь.
Автоматические первичные ключи
По умолчанию Django добавляет каждой модели такое поле:
Copy Source | Copy HTML
id = models.AutoField(primary_key=True)
Это автоинкрементный первичный ключ.
Если вы хотите создать свой первичный ключ, просто определите атрибут primary_key=True в одном из ваших полей. Если Django увидит, что вы однозначно задали Field.primary_key, то колонка id добавлена не будет.
Каждая модель должна иметь одно и только одно поле с primary_key=True.
Подробные имена полей
Каждый тип поля, кроме ForeignKey, ManyToManyField и OneToOneField, содержит необязательный первый аргумент — подробное имя (verbose name). Если этот аргумент не задан, Django автоматически создаст его, используя имена атрибутов поля, преобразовывая нижние подчеркивания в пробелы.
В данном примере, подробное имя будет «Person’s first name»:
Copy Source | Copy HTML
first_name = models.CharField(max_length= 30 )
ForeignKey, ManyToManyField и OneToOneField требуют, чтобы первым аргументом была модель, поэтому с ними используется аргумент verbose_name:
Copy Source | Copy HTML
poll = models.ForeignKey(Poll, verbose_name= «the related poll» )
sites = models.ManyToManyField(Site, verbose_name= «list of sites» )
place = models.OneToOneField(Place, verbose_name= «related place» )
Не принято задавать значение verbose_name с большой буквы. Django автоматически переведет первый символ в верхний регистр, когда это потребуется.
Django учебник Часть 3: Использование моделей
В этой статье показано, как определить модели для LocalLibrary сайта. Она объясняет, что такое модель, как она объявляется, и некоторые из основных типов полей. В ней также кратко показаны некоторые из основных способов доступа к данным модели.
| Предпосылки | Django Tutorial Part 2: Creating a skeleton website. |
|---|---|
| Задача: | Научиться проектировать и создавать свои собственные модели, выбирая подходящие поля. |
Обзор
В этом учебнике показано, как определить и получить доступ к моделям на примере LocalLibrary website.
Проектирование моделей LocalLibrary
Перед тем, как вы начнёте программировать модели, стоит потратить несколько минут, чтобы подумать о том, какие данные нам нужно хранить, и о взаимоотношениях между разными объектами.
Мы знаем, что нам нужно хранить информацию о книгах (название, резюме, автор, язык, на котором написана книга, категория, ISBN) и что у нас может быть несколько доступных экземпляров (с уникальным глобальным идентификатором, статусом доступности и т. Д.). Нам может потребоваться хранить больше информации об авторе, чем просто их имя, и могут быть несколько авторов с одинаковыми или похожими именами. Мы хотим иметь возможность сортировать информацию на основе названия книги, автора, письменного языка и категории.
При проектировании ваших моделей имеет смысл иметь отдельные модели для каждого «объекта» (группа связанной информации). В этом случае очевидными объектами являются книги, экземпляры книг и авторы.
Как только мы определились с нашими моделями и полями, нам нужно подумать об отношениях. Django позволяет вам определять отношения, как один к одному ( OneToOneField ), один ко многим ( ForeignKey ) и многие ко многим ( ManyToManyField ).
На диаграмме также показаны зависимости между моделями, включая их множители. Множители представляют собой числа на диаграмме, показывающие минимум и максимум единиц каждой модели, которые могут присутствовать в этой связи. Например, соединительная линия между ящиками показывает, что книга и жанр связаны между собой. Цифры, близкие к модели жанра, показывают, что у книги может быть один или несколько жанров (сколько угодно), а числа на другом конце строки рядом с моделью книги показывают, что у жанра может быть ноль или более связанных книг.
Примечание. В следующем разделе приведён базовый пример, поясняющий, как модели определяются и используются. Когда вы его прочитаете, подумайте, как мы построим каждую из моделей на диаграмме выше.
Модель для начинающих
В этом разделе представлен краткий обзор того, как определяется модель, и некоторые из наиболее важных полей и аргументы поля.
Определение модели
В следующих разделах мы подробно рассмотрим каждый элемент внутри модели:
Имя поля используется для обращения к нему в запросах и шаблонах. В полях также есть метка, которая задаётся как аргумент (verbose_name), либо выводится путём заглавной буквы первой буквы имени переменной поля и замены любых символов подчёркивания пробелом (например, my_field_name будет иметь метку по умолчанию My field name).
Порядок, в котором объявляются поля, будет влиять на их порядок по умолчанию, если модель отображается в форме (например, на сайте администратора), хотя это может быть переопределено.
Общие аргументы поля
Следующие общие аргументы могут использоваться при объявлении многих / разных типов полей:
Общие типы полей
Следующие общие аргументы могут использоваться при объявлении многих / разных типов полей:
Существует много других типов полей, включая поля для разных типов чисел (большие целые числа, малые целые числа, дробные), логические значения, URL-адреса, slugs, уникальные идентификаторы и другие «связанные с временем» сведения (продолжительность, время и т. д.). Вы можете просмотреть full list here.
Метаданные
Вы можете объявить метаданные на уровне модели для своей модели, объявив класс Meta, как показано на рисунке.
Одной из наиболее полезных функций этих метаданных является управление сортировка записей, возвращаемых при запросе типа модели. Вы можете сделать это, указав соответствия названия полей для сортировки, как показано выше. Порядок будет зависеть от типа поля (поля символов отсортированы в алфавитном порядке, а поля даты отсортированы в хронологическом порядке). Как показано выше, вы можете префикс имени поля минус-символом (-), чтобы изменить порядок сортировки.
Например, если мы решили сортировать книги по умолчанию:
Книги будут отсортированы по алфавиту по названию, от A-Z, а затем по дате публикации внутри каждого названия, от самого нового до самого старого.
Другим распространённым атрибутом является verbose_name, подробное имя для класса в единственной и множественной форме:
Другие полезные атрибуты позволяют создавать и применять новые «разрешения доступа» для модели (разрешения по умолчанию применяются автоматически), разрешить упорядочение на основе другого поля или объявить, что класс является «абстрактным» (базовый класс, для которого вы не можете создавать записи, и вместо этого будет создан для создания других моделей). Многие другие параметры метаданных управляют тем, какая база данных должна использоваться для модели и как хранятся данные (это действительно полезно, если вам нужно сопоставить модель с существующей базой данных). Полный список опций метаданных доступен здесь: Model metadata options (Django документация).
Методы
Модель также может иметь методы. Минимально в каждой модели вы должны определить стандартный метод класса для Python __str __ (), чтобы вернуть удобочитаемую строку для каждого объекта. Эта строка используется для представления отдельных записей на сайте администрирования (и в любом другом месте, где вам нужно обратиться к экземпляру модели). Часто это возвращает поле названия или имени из модели.
Другим распространённым методом включения в модели Django является get_absolute_url (), который возвращает URL-адрес для отображения отдельных записей модели на веб-сайте (если вы определяете этот метод, тогда Django автоматически добавит кнопку «Просмотр на сайте» на экранах редактирования записей модели на сайте администратора). Типичный шаблон для get_absolute_url () показан ниже.
Конечно, для выполнения этой работы вам всё равно придётся писать сопоставление URL-адрес, просмотр и шаблон!
Вы также можете определить любые другие методы, которые вам нравятся, и вызывать их из вашего кода или шаблонов (при условии, что они не принимают никаких параметров).
Управление моделью
После того, как вы определили свои классы моделей, вы можете использовать их для создания, обновления или удаления записей и для запуска запросов для получения всех записей или отдельных подмножеств записей. Мы покажем вам, как это сделать в учебнике, когда мы определяем наши представления, с кратким обзором.
Создание и изменение записей
Чтобы создать запись, вы можете определить экземпляр модели, а затем вызвать метод save ().
Примечание. Если вы не указали какое-либо поле в качестве primary_key, новая запись будет выдаваться автоматически, с идентификатором имени поля. Вы можете запросить это поле после сохранения указанной выше записи, и оно будет иметь значение 1.
Вы можете получить доступ к полям в этой новой записи с использованием синтаксиса точек и изменить значения. Вы должны вызвать save (), чтобы сохранить изменённые значения в базе данных.
Поиск записей
Вы можете искать записи, соответствующие определённым критериям, используя атрибут объектов модели (предоставляемый базовым классом).
Примечание. Объяснение того, как искать записи, используя «абстрактную» модель и имена полей, может быть немного запутанным. В приведённом ниже обсуждении мы будем ссылаться на модель книги с полями названия и жанра, где жанр также является моделью с единственным именем в поле.
Метод filter() Django позволяет отфильтровать возвращаемый QuerySet для соответствия указанному текстовому или числовому полю по конкретным критериям. Например, чтобы отфильтровать книги, содержащие слово «wild» («дикие») в заголовке, а затем подсчитать их, мы могли бы сделать следующее.
В некоторых случаях вам нужно будет фильтровать поле, которое определяет отношение «один ко многим» к другой модели (например, ForeignKey ). В этом случае вы можете «индексировать» поля в связанной модели с дополнительными двойными подчёркиваниями. Так, например, чтобы фильтровать книги с определённым жанровым рисунком, вам нужно будет указывать имя в поле жанра, как показано ниже:
Примечание: Вы можете использовать символы подчёркивания (__) для навигации по многим уровням отношений (ForeignKey / ManyToManyField) по своему усмотрению. Например, книга, имеющая разные типы, определяемая с использованием дополнительной связи «обложка», может иметь имя параметра: type__cover__name__exact = ‘hard’.
Существует гораздо больше возможностей для запросов, включая обратные поиски от связанных моделей, цепочки фильтров, возврат меньшего набора значений и т. д. Для получения дополнительной информации см. Making queries (Django Docs, [EN]).
Определение моделей LocalLibrary
Модель жанра
Модель книги
Скопируйте модель книги ниже и снова вставьте её в нижнюю часть файла. Модель книги представляет всю информацию о доступной книге в общем смысле, но не конкретный физический «экземпляр» или «копию» для временного использования. Модель использует CharField для представления названия книги и isbn (обратите внимание, как isbn указывает свой ярлык как «ISBN», используя первый неименованный параметр, поскольку в противном случае ярлык по умолчанию был бы «Isbn»). Модель использует TextField для summary, потому что этот текст, возможно, должен быть очень длинным.
Жанр представляет из себя ManyToManyField, так что книга может иметь несколько жанров, а жанр может иметь много книг. Автор объявляется через ForeignKey, поэтому в каждой книге будет только один автор, но у автора может быть много книг (на практике книга может иметь несколько авторов, но не в такой реализации!)
Модель также определяет __str __ (), используя поле заголовка книги для представления книги. Окончательный метод get_absolute_url () возвращает URL-адрес, который можно использовать для доступа к подробной записи для этой модели (для этого нам нужно будет определить сопоставление URL-адресов, в котором содержится подробная информация о книге, и определить связанное представление и шаблон ).
Модель BookInstance
Затем скопируйте модель BookInstance (показано ниже) под другие модели. BookInstance представляет собой определённую копию книги, которую кто-то может брать взаймы, и включает информацию о том, доступна ли копия или в какой день она ожидается, «отпечаток» или сведения о версии, а также уникальный идентификатор книги в библиотеке. Теперь некоторые из полей и методов будут знакомы. Модель использует
Мы дополнительно объявляем несколько новых типов полей:
Модель __str __ () представляет объект BookInstance, используя комбинацию его уникального идентификатора и связанного с ним заголовка книги.
Примечание. Немного Python:
Обратите также внимание на то, что, хотя этот подход совершенно применим, но он более не является предпочтительным. Начиная с Python 3, вы должны использовать метод format, например. ‘ <0>(<1>)’.format (self.id, self.book.title). Вы можете узнать больше об этом здесь.
Модель автора
Скопируйте модель автора (показано ниже) под существующим кодом в models.py.
Теперь все поля/методы должны быть знакомы. Модель определяет автора как имя, фамилию, дату рождения и (необязательную) дату смерти. Он указывает, что по умолчанию __str __ () возвращает имя в фамилии, порядковый номер первого имени. Метод get_absolute_url () отменяет сопоставление URL-адреса автора с целью получения URL-адреса для отображения отдельного автора.
Повторно выполнить миграцию базы данных
Теперь все ваши модели созданы. Теперь переустановите миграцию базы данных, чтобы добавить их в свою базу данных.
Представьте себе, что местный благотворитель жертвует ряд новых книг, написанных на другом языке (скажем, фарси). Задача состоит в том, чтобы определить, как они будут лучше всего представлены на нашем веб-сайте библиотеки, а затем добавить их в модели.
Некоторые вещи, которые следует учитывать:
После того, как вы решили, добавьте поле. Вы можете увидеть наше решение на Github here.
Резюме
В этой статье мы узнали, как определять модели, а затем использовать эту информацию в разработке и внедрении соответствующих моделей для сайта LocalLibrary.
На этом этапе мы отвлечёмся от создания сайта и проверим Django Administration site. Этот сайт позволит нам добавить некоторые данные в библиотеку, которые мы можем отобразить с помощью наших (ещё не созданных) представлений и шаблонов.
Документация Django 1.6
Этот раздел содержит все существующие подробности о всех параметрах поля и типах полей в Django.
Если существующие поля не предоставляют необходимого функционала, вы можете поискать в localflavor, который содержит дополнительный функционал полезный для различных стран. Также вы можете легко создать собственное поле для модели.
Параметры поля¶
Приведенные аргументы доступны для всех полей. Все они не обязательны.
При использовании Oracle, NULL будет использоваться для пустой строки независимо от значения этого параметра.
blank ¶
choices ¶
Первый элемент – это значение, которое будет сохранено в базе данных. Второй элемент – название, которое будет отображаться для пользователей. Например:
Значения лучше указать в константах внутри модели:
Можно указать список значений и не в модели, но так все данные будут связаны с моделью, и к значениям можно легко обратиться (например, Student.SOPHOMORE можно использовать импортировав модель Student ).
Вы можете сгруппировать значения в именованные группы:
Первый элемент каждого кортежа – это название группы. Второй элемент – итератор с двух-элементными кортежами содержащими значение и отображаемое название. Сгруппированные опции могут комбинироваться с не сгруппированными (как unknown в примере выше).
db_column ¶
Имя колонки в базе данных для хранения данных этого поля. Если этот параметр не указан, Django будет использовать название поля.
Если имя колонки это зарезервированное SQL слово, или содержит символы запрещенные в названиях переменной в Python – в частности, дефис – все нормально. Django автоматически экранирует название колонок и таблиц.
db_index ¶
db_tablespace ¶
default ¶
Значение по умолчанию для поля. Это может быть значение или вызываемый(callable) объект. Если это вызываемый объект, он будет вызван при создании нового объекта.
Значение по умолчанию не может быть изменяемым значением (экземпляр модели, список и т.д.), т.к. все объекты модели будут ссылаться на этот объект. Вместо этого укажите функцию, которая возвращает нужное значение. Например, если у вас есть собственное поле JSONField и вы хотите указать словарь как значение по умолчанию, используйте lambda следующим образом:
editable ¶
error_messages ¶
error_messages позволяет переопределить сообщения ошибок возвращаемых полем. Используйте словарь с ключами соответствующими необходимым ошибкам.
help_text ¶
Подсказка, отображаемая под полем в интерфейсе администратора. Это полезно для описания поля, даже если модель не используется в форме.
primary_key ¶
При True это поле будет первичным ключом.
unique ¶
При True значение поля должно быть уникальным.
unique_for_date ¶
unique_for_month ¶
unique_for_year ¶
verbose_name ¶
Отображаемое имя поля. Если параметр не указан, Django самостоятельно создаст его используя имя атрибута поля, заменяя нижнее подчеркивание на пробелы. Смотрите раздел про отображаемые имена полей.
validators ¶
Список проверок(“валидаторов”) выполняемых для этого поля. Смотрите раздел о “валидаторах” для подробной информации.
Типы полей¶
AutoField ¶
BigIntegerField ¶
BinaryField ¶
BooleanField ¶
Поле хранящее значение true/false.
CharField ¶
Строковое поле для хранения коротких или длинных строк.
Максимальная длинна(в символах) этого поля. max_length используется для проверки данных на уровне базы данных и форм Django.
Если вы создаете независимое приложение, которое должно работать на различных базах данных, помните что существуют некоторые ограничения использования max_length для некоторых типов баз данных. Смотрите раздел про использование различных типов баз данных.
Если вы используете это поле с MySQLdb 1.2.2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.
CommaSeparatedIntegerField ¶
DateField ¶
Дата, представленная в виде объекта datetime.date Python. Принимает несколько дополнительных параметров:
Значение поля будет автоматически установлено в текущую дату при каждом сохранении объекта. Полезно для хранения времени последнего изменения. Заметим, что текущее время будет использовано всегда; это не просто значение по умолчанию, которое вы можете переопределить.
Значение поля будет автоматически установлено в текущую дату при создании(первом сохранении) объекта. Полезно для хранения времени создания. Заметим, что текущее время будет использовано всегда; это не просто значение по-умолчанию, которое вы можете переопределить.
В форме поле будет представлено как :class:`
DateTimeField ¶
DecimalField ¶
Количество знаков после запятой.
Например, для хранения числа до 999 с двумя знаками после запятой, используйте:
Для хранения числа до миллиарда и 10 знаков после запятой:
EmailField ¶
Incompliance to RFCs
Значение max_length в 75 символов не достаточно для хранения всех возможных значений в соответствии RFC3696/5321. Для хранения всех возможных вариантов необходимо значение max_length в 254. Значение в 75 символов сложилось исторически и не изменяется для обратной совместимости.
FileField ¶
Поле для загрузки файла.
primary_key и unique не принимаются, и вызовут исключение TypeError при использовании.
Принимает один обязательный параметр:
Также принимается вызываемый объект, такой как функция, который будет вызван для получения пути к загруженному файлу, включая имя файла. Вызываемый объект должен принимать два обязательных аргумента, и возвращать путь в стиле Unix (с прямыми слэшами), который будет передан в систему хранения файлов(storage). Два аргумента это:
Оригинальное имя файла. Вы можете его учитывать, или проигнорировать, при определении окончательного пути к файлу.
Также принимается один дополнительный параметр:
Необязателен. Объект “storage”, который отвечает за хранение и получение файлов. Смотрите Управление файлами для подробной информации.
Процесс сохранения файла часть процесса сохранения объекта, таким образом имя файла сохраненного на диске не будет доступно, пока объект не будет сохранен.
Заметим, что при загрузке файлов, вы должны обращать внимание куда вы загружаете файлы и какие типы файлов загружаются, чтобы предотвратить возможные уязвимости в защите системы. Проверяйте все загружаемые файлы. Например, если вы разрешите загрузить файл без проверки в каталог, которая обрабатывается сервером, кто-нибудь сможет загрузить CGI или PHP скрипт и выполнить его посетив его URL на вашем сайте. Не допускайте это.
Также заметим что это относится и к HTML файлам, так как они могу быть выполнены в браузере(хоть и не на сервере), и нести угрозу XSS или CSRF атаки.
FileField и FieldFile¶
Работает так же как и метод file.close() в Python и закрывает файл связанный с объектом.
Или же создать из строки с содержимым файла:
Обратите внимание, когда объект модели удаляется, связанные файлы не удаляются. Если вам необходимо удалять их, делайте это самостоятельно (например, используя команду запущенную через cron).
FilePathField ¶
Конечно же можно использовать все три аргумента вместе.
FloatField ¶
FloatField vs. DecimalField
ImageField ¶
Имя поля, которому автоматически будет присвоено значение высоты изображения при каждом сохранении объекта.
Имя поля, которому автоматически будет присвоено значение ширины изображения при каждом сохранении объекта.
IntegerField ¶
IPAddressField ¶
GenericIPAddressField ¶
NullBooleanField ¶
PositiveIntegerField ¶
PositiveSmallIntegerField ¶
SlugField ¶
Slug – газетный термин. “Slug” – это короткое название-метка, которое содержит только буквы, числа, нижнее подчеркивание или дефис. В основном используются в URL.
SmallIntegerField ¶
TextField ¶
Если вы используете это поле с MySQLdb 1.2.1p2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.
TimeField ¶
URLField ¶
The current value of the field will be displayed as a clickable link above the input widget.
Поля отношений¶
Django предоставляет набор полей для определения связей между моделями.
ForeignKey ¶
Связь многое-к-одному. Принимает позиционный аргумент: класс связанной модели.
Если вам необходимо добавить связь на модель, которая еще не определена, вы можете использовать имя модели вместо класса:
Такой способ позволяет создать циклическую зависимость между моделями из разных приложений.
Представление в базе данных¶
Параметры¶
Словарь параметров для фильтрации (смотрите Выполнение запросов), которые ограничивают множество связанных объектов, отображаемых в поле формы. Используйте функции модуля Python datetime чтобы ограничить множество по дате. Например:
позволяет выбирать связанные объекты с pub_date до текущей даты.
Поле связанной модели, которое используется для создания связи между таблицами. По-умолчанию, Django использует первичный ключ.
Указывает создавать ли “constraint” для внешнего ключа в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:
Вам досталась в наследство нецелостная база данных
Вы используете шардинг базы данных.
Каскадное удаление, значение по умолчанию.
Препятствует удалению связанного объекта вызывая исключение django.db.models.ProtectedError`(подкласс :exc:`django.db.IntegrityError ).
ManyToManyField ¶
Представление в базе данных¶
Параметры¶
Если у вас несколько ManyToManyField указывающих на одну модель и хотите избежать создания обратных связей, укажите в related_name уникальное значение с ‘+’ в конце:
Используется только при рекурсивной связи. Например, есть модель:
Имя промежуточной таблицы для хранения связей многое-ко-многим. Если не указан, Django самостоятельно создаст название по умолчанию используя название таблицы определяющей связь и название поля.
Указывает создавать ли “constraint” для внешних ключей в промежуточной таблице в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:
Вам досталась в наследство нецелостная база данных
Вы используете шардинг базы данных.
Нельзя указать db_constraint и through одновременно.
OneToOneField ¶
В основном применяется как первичный ключ модели, которая “расширяет” другую модель. Например, Multi-table наследование работает через неявное добавление связи один-к-одному от дочерней модели к родительской.
модель User будет содержать следующие атрибуты:
При True и связанной модели, которая наследуется от другой модели, определяет, что должна сохраняться связь на родительскую модель, а не поле OneToOneField дочерней модели, которое используется для организации наследования моделей.
Смотрите примеров использования OneToOneField в Связь один к одному.

