Справочник типов полей¶
Этот документ содержит весь справочник по API Field
, включая field options и field types, предлагаемые Django.
См.также
Если встроенные поля не справляются, вы можете попробовать django-localflavor (Документация), который содержит разные фрагменты кода, полезные для конкретных стран и культур.
Также вы можете легко создать свои собственные поля модели.
Примечание
Технически эти модели определены в django.db.models.fields
, но для удобства они импортированы в django.db.models
; стандартное соглашение - использовать from django.db import models
и ссылаться на поля как на models.<Foo>Field
.
Опции полей¶
Следующие аргументы доступны для всех типов полей. Все необязательные.
null
¶
-
Field.
null
¶
Если True
, Django будет хранить пустые значения как NULL
в базе данных. По умолчанию установлено значение False
.
Избегайте использования null
в строковых полях, таких как CharField
и TextField
. Если строковое поле имеет значение null=True
, это означает, что у него есть два возможных значения для «нет данных»: NULL
и пустая строка. В большинстве случаев избыточно иметь два возможных значения для «нет данных»; соглашение Django заключается в использовании пустой строки, а не NULL
. Единственное исключение - когда a CharField
имеет оба значения: unique=True
и blank=True
. В этой ситуации требуется null=True
, чтобы избежать нарушений ограничений при сохранении нескольких объектов с пустыми значениями.
Как для строковых, так и для нестроковых полей вам также нужно установить blank=True
, если вы хотите разрешить пустые значения в формах, поскольку параметр null
влияет только на хранилище базы данных (см. blank
).
Примечание
При использовании базы данных Oracle значение NULL
будет сохранено для обозначения пустой строки независимо от этого атрибута.
blank
¶
-
Field.
blank
¶
Если True
, поле может быть пустым. По умолчанию установлено значение False
.
Обратите внимание, что это отличается от null
. null
связана исключительно с базой данных, тогда как blank
связана с проверкой. Если поле имеет blank=True
, проверка формы позволит ввести пустое значение. Если поле имеет blank=False
, поле будет обязательным.
choices
¶
-
Field.
choices
¶
A sequence consisting itself of iterables of exactly two items (e.g.
[(A, B), (A, B) ...]
) to use as choices for this field. If choices are
given, they’re enforced by model validation and the
default form widget will be a select box with these choices instead of the
standard text field.
Первый элемент в каждом кортеже - это фактическое значение, которое должно быть установлено в модели, а второй элемент - удобочитаемое имя. Например:
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
]
Как правило, лучше всего определить варианты выбора внутри класса модели и определить константу с соответствующим именем для каждого значения:
from django.db import models
class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = [
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
]
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
)
def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)
Хотя вы можете определить список вариантов за пределами класса модели и затем обратиться к нему, определение вариантов и имен для каждого варианта внутри класса модели сохраняет всю эту информацию вместе с классом, который его использует, и делает выбор простым для ссылок (например, Student.SOPHOMORE
будет работать везде, где была импортирована модель Student
).
Вы также можете собрать доступные варианты в именованные группы, которые можно использовать для организационных целей:
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]
Первый элемент в каждом кортеже - это имя, которое нужно применить к группе. Второй элемент представляет собой итерацию из двухзначных кортежей, причем каждый двухзначный кортеж содержит значение и удобочитаемое имя для опции. Сгруппированные параметры могут быть объединены с не сгруппированными параметрами в одном списке (например, опция unknown в этом примере).
Для каждого поля модели, для которого установлено choices
, Django добавит метод для извлечения понятного человеку имени для текущего значения поля. Смотрите get_FOO_display()
в документации по API базы данных.
Обратите внимание, что выбором может быть любой объект последовательности - не обязательно список или кортеж. Это позволяет вам динамически строить выбор. Но если вы обнаружите, что хакинг choices
динамичен, вам, вероятно, лучше использовать правильную таблицу базы данных с ForeignKey
. choices
предназначен для статических данных, которые мало меняются, если вообще когда-либо меняются.
Примечание
Новая миграция создается каждый раз, когда меняется порядок `choices
.
Если в поле не установлено blank=False
вместе с default
, то метка, содержащая "---------"
будет отображаться с полем выбора. Чтобы переопределить это поведение, добавьте кортеж в choices
, содержащий None
; например (None, 'Your String For Display')
. В качестве альтернативы вы можете использовать пустую строку вместо None
, где это имеет смысл - например, для CharField
.
db_column
¶
-
Field.
db_column
¶
Имя столбца базы данных для использования в этом поле. Если это не указано, Django будет использовать имя поля.
Если имя столбца вашей базы данных является зарезервированным словом SQL или содержит символы, которые не допускаются в именах переменных Python, особенно дефис, то это нормально. За кулисами Джанго цитирует имена столбцов и таблиц.
db_tablespace
¶
-
Field.
db_tablespace
¶
Имя табличного пространства базы данных, которое будет использоваться для индекса этого поля, если это поле проиндексировано. По умолчанию используется настройка проекта DEFAULT_INDEX_TABLESPACE
, если установлена, или db_tablespace
модели, если таковая имеется. Если серверная часть не поддерживает табличные пространства для индексов, эта опция игнорируется.
default
¶
-
Field.
default
¶
Значение по умолчанию для поля. Это может быть значение или вызываемый объект. Если он вызывается, он будет вызываться каждый раз, когда создается новый объект.
Значением по умолчанию не может быть изменяемый объект (экземпляр модели, list
, set
и т.п.), Поскольку ссылка на тот же экземпляр этого объекта будет использоваться в качестве значения по умолчанию во всех новых моделях. экземпляров. Вместо этого оберните желаемое значение по умолчанию в вызываемый. Например, если вы хотите указать по умолчанию dict
для JSONField
, используйте функцию:
def contact_default():
return {"email": "to1@example.com"}
contact_info = JSONField("ContactInfo", default=contact_default)
lambda
нельзя использовать для опций поля, таких как default
, потому что они не могут быть сериализованы миграциями. Смотрите эту документацию для других предостережений.
Для таких полей, как ForeignKey
, которые отображаются на экземпляры модели, значения по умолчанию должны быть значением поля, на которое они ссылаются (pk
, если не установлено to_field
), а не экземплярами модели.
Значение по умолчанию используется, когда создаются новые экземпляры модели, а значение для поля не указывается. Когда поле является первичным ключом, значение по умолчанию также используется, когда поле установлено в None
.
editable
¶
-
Field.
editable
¶
Если False
, поле не будет отображаться ни админкой, ни какими-либо другими ModelForm
. Они также пропускаются во время проверки модели. По умолчанию установлено значение True
.
error_messages
¶
-
Field.
error_messages
¶
Аргумент error_messages
позволяет вам переопределить сообщения по умолчанию, которые вызовет поле. Передайте словарь с ключами, соответствующими сообщениям об ошибках, которые вы хотите переопределить.
Ключи сообщений об ошибке включают null
, blank
, invalid
, invalid_choice
, unique
и unique_for_date
. Дополнительные ключи сообщений об ошибках указаны для каждого поля в разделе «Типы полей» Field types ниже.
Эти сообщения об ошибках часто не распространяются на формы. Смотрите Соображения относительно модели error_messages.
help_text
¶
-
Field.
help_text
¶
Дополнительный «справочный» текст для отображения с виджетом формы. Это полезно для документации, даже если ваше поле не используется в форме.
Обратите внимание, что это значение не экранировано HTML в автоматически сгенерированных формах. Это позволяет вам включать HTML в help_text
, если вы того пожелаете. Например:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
В качестве альтернативы вы можете использовать обычный текст и django.utils.html.escape()
для экранирования любых специальных символов HTML. Убедитесь, что вы избегаете любого текста справки, который может прийти от ненадежных пользователей, чтобы избежать атаки межсайтового скриптинга.
primary_key
¶
-
Field.
primary_key
¶
Если True
, это поле является первичным ключом для модели.
Если вы не укажете primary_key=True
для какого-либо поля в вашей модели, Django автоматически добавит AutoField
для хранения первичного ключа, поэтому вам не нужно устанавливать``primary_key=True`` в любом из ваших полей, если вы не хотите переопределять поведение первичного ключа по умолчанию. Для получения дополнительной информации см. Автоматические поля первичного ключа.
primary_key=True
подразумевает null=False
и unique=True
. На объекте разрешен только один первичный ключ.
Поле первичного ключа доступно только для чтения. Если вы измените значение первичного ключа для существующего объекта, а затем сохраните его, новый объект будет создан вместо старого.
unique
¶
-
Field.
unique
¶
Если True
, это поле должно быть уникальным во всей таблице.
Это обеспечивается на уровне базы данных и проверкой модели. Если вы попытаетесь сохранить модель с повторяющимся значением в поле unique
, то будет вызвано исключение django.db.IntegrityError
методом save()
.
Эта опция действительна для всех типов полей, кроме ManyToManyField
и OneToOneField
.
Обратите внимание, что когда unique
равно True
, вам не нужно указывать db_index
, потому что unique
подразумевает создание индекса.
unique_for_date
¶
-
Field.
unique_for_date
¶
Задайте для него имя DateField
или DateTimeField
, чтобы требовать, чтобы это поле было уникальным для значения поля даты.
Например, если у вас есть поле title
, которое имеет unique_for_date="pub_date" ``, то Django не разрешит ввод двух записей с одинаковыми ``title
и pub_date
.
Обратите внимание, что если вы установите это значение для DateTimeField
, будет учитываться только часть поля - дата. Кроме того, когда USE_TZ
равно True
, проверка будет выполняться в текущий часовой пояс во время сохранения объекта.
Это обеспечивается методом Model.validate_unique()
во время проверки модели, но не на уровне базы данных. Если ограничение unique_for_date
включает поля, которые не являются частью ModelForm
(например, если одно из полей указано в exclude
или имеет editable=False
), Model.validate_unique()
пропустит проверку для этого конкретного ограничения.
unique_for_month
¶
-
Field.
unique_for_month
¶
Как unique_for_date
, но требует, чтобы поле было уникальным по отношению к месяцу.
verbose_name
¶
-
Field.
verbose_name
¶
Удобочитаемое имя для поля. Если подробное имя не указано, Django автоматически создаст его, используя имя атрибута поля, преобразовав подчеркивание в пробелы. Смотрите Подробные имена полей.
validators
¶
-
Field.
validators
¶
Список валидаторов для этого поля. См. Документацию валидаторы для получения дополнительной информации.
Регистрация и выборка поисков¶
Field
реализует API регистрации поиска. API можно использовать для настройки поиска, который доступен для класса поля, и того, как поиск выбирается из поля.
Типы полей¶
AutoField
¶
-
class
AutoField
(**options)[исходный код]¶
IntegerField
, который автоматически увеличивается в соответствии с доступными идентификаторами. Вам обычно не нужно использовать это напрямую; поле первичного ключа будет автоматически добавлено в вашу модель, если вы не укажете иное. Смотрите Автоматические поля первичного ключа.
BigAutoField
¶
-
class
BigAutoField
(**options)[исходный код]¶
64-разрядное целое число, очень похожее на AutoField
, за исключением того, что оно гарантированно соответствует числам от 1
до 9223372036854775807
.
BigIntegerField
¶
-
class
BigIntegerField
(**options)[исходный код]¶
64-разрядное целое число, очень похожее на IntegerField
, за исключением того, что оно гарантированно соответствует числам от -9223372036854775808
до 9223372036854775807
. Виджет формы по умолчанию для этого поля TextInput
.
BinaryField
¶
-
class
BinaryField
(max_length=None, **options)[исходный код]¶
Поле для хранения необработанных двоичных данных. Может быть назначено bytes
, bytearray
или memoryview
.
По умолчанию BinaryField
устанавливает editable
в False
, и в этом случае он не может быть включен в ModelForm
.
Более старые версии не позволяют устанавливать editable
в True
.
BinaryField
имеет один дополнительный необязательный аргумент:
-
BinaryField.
max_length
¶ Максимальная длина (в символах) поля. Максимальная длина применяется в проверке Django с использованием
MaxLengthValidator
.
Злоупотребление BinaryField
Хотя вы можете подумать о хранении файлов в базе данных, учтите, что это плохой дизайн в 99% случаев. Это поле не замена для правильной обработки статических файлов.
BooleanField
¶
-
class
BooleanField
(**options)[исходный код]¶
Поле истина/ложь.
Виджет формы по умолчанию для этого поля CheckboxInput
или NullBooleanSelect
если null=True
.
Значение по умолчанию BooleanField
равно None
, когда Field.default
не определено.
В более старых версиях это поле не разрешает null=True
, поэтому вы должны использовать NullBooleanField
. Использование последнего в настоящее время не рекомендуется, поскольку в будущей версии Django его, скорее всего, запретят.
В старых версиях это поле неявно имеет blank = True
. Вы можете восстановить предыдущее поведение, установив blank = True
.
CharField
¶
-
class
CharField
(max_length=None, **options)[исходный код]¶
Строковое поле, для строк малого и большого размера.
Для больших объемов текста используйте TextField
.
Виджет формы по умолчанию для этого поля TextInput
.
CharField
имеет один дополнительный обязательный аргумент:
-
CharField.
max_length
¶ Максимальная длина (в символах) поля. Максимальная длина применяется на уровне базы данных и при проверке Django с использованием
MaxLengthValidator
.
Примечание
Если вы пишете приложение, которое должно быть переносимо на несколько бэкэндов базы данных, вы должны знать, что для некоторых бэкэндов существуют ограничения на max_length
. За подробностями обращайтесь к примечаниям к базе данных.
DateField
¶
-
class
DateField
(auto_now=False, auto_now_add=False, **options)[исходный код]¶
Дата, представленная в Python экземпляром datetime.date
. Имеет несколько дополнительных необязательных аргументов:
-
DateField.
auto_now
¶ Автоматически устанавливать текущую дату каждый раз, когда объект сохраняется. Полезно для отметок времени последнего изменения. Обратите внимание, что текущая дата всегда используется; это не просто значение по умолчанию, которое вы можете переопределить.
Поле автоматически обновляется только при вызове
Model.save()
. Поле не обновляется при обновлении других полей другими способами, такими какQuerySet.update()
, хотя вы можете указать пользовательское значение для поля в обновлении, как это.
-
DateField.
auto_now_add
¶ Автоматически установить поле на сейчас, когда объект создается впервые. Полезно для создания меток времени. Обратите внимание, что текущая дата всегда используется; это не просто значение по умолчанию, которое вы можете переопределить. Так что даже если вы установите значение для этого поля при создании объекта, оно будет проигнорировано. Если вы хотите изменить это поле, установите вместо
auto_now_add=True
следующее:- Для
DateField
:default=date.today
- отdatetime.date.today()
- Для
DateTimeField
:default=timezone.now
- отdjango.utils.timezone.now()
- Для
Виджет формы по умолчанию для этого поля TextInput
. В админке добавляется календарь JavaScript и ярлык для «Сегодня». Включает в себя дополнительный invalid_date
ключ сообщения об ошибке.
Опции auto_now_add
, auto_now
и default
являются взаимоисключающими. Любая комбинация этих параметров приведет к ошибке.
Примечание
Как в настоящее время реализовано, установка auto_now
или auto_now_add
в True
приведет к тому, что в поле будут установлены editable=False
и blank=True
.
Примечание
Опции auto_now
и auto_now_add
всегда будут использовать дату в часовом поясе по умолчанию в момент создания или обновления. Если вам нужно что-то другое, вы можете рассмотреть возможность использования собственной функции вызываемой по умолчанию или переопределения save()
вместо использования auto_now
или auto_now_add
; или используя DateTimeField
вместо `` DateField`` и решая, как обрабатывать преобразование из даты-времени в дату во время отображения.
DateTimeField
¶
-
class
DateTimeField
(auto_now=False, auto_now_add=False, **options)[исходный код]¶
Дата и время, представленные в Python экземпляром datetime.datetime
. Принимает те же дополнительные аргументы, что и DateField
.
Виджет формы по умолчанию для этого поля это TextInput
. Админка использует два отдельных виджета TextInput
с ярлыками JavaScript.
DecimalField
¶
-
class
DecimalField
(max_digits=None, decimal_places=None, **options)[исходный код]¶
Десятичное число с фиксированной точностью, представленное в Python экземпляром Decimal
. Он проверяет ввод с помощью DecimalValidator
.
Имеет два обязательных аргумента:
-
DecimalField.
max_digits
¶ Максимально допустимое количество цифр в числе. Обратите внимание, что это число должно быть больше или равно
decimal_places
.
-
DecimalField.
decimal_places
¶ Количество десятичных разрядов для хранения с числом.
Например, чтобы хранить числа до 999
с разрешением в 2 десятичных знака, вы должны использовать:
models.DecimalField(..., max_digits=5, decimal_places=2)
И хранить цифры примерно до миллиарда с разрешением 10 десятичных знаков:
models.DecimalField(..., max_digits=19, decimal_places=10)
Виджетом формы по умолчанию для этого поля является NumberInput
, когда localize
False
или TextInput
в противном случае.
Примечание
Для получения дополнительной информации о различиях между классами FloatField
и DecimalField
, пожалуйста, смотрите FloatField или DecimalField. Вы также должны ознакомиться с ограничения SQLite для десятичных полей.
DurationField
¶
-
class
DurationField
(**options)[исходный код]¶
Поле для хранения периодов времени - смоделировано в Python с помощью timedelta
. При использовании в PostgreSQL используемый тип данных представляет собой interval
, а в Oracle тип данных представляет собой INTERVAL DAY (9) TO SECOND (6)
. В противном случае используется bigint
микросекунд.
Примечание
Арифметика с DurationField
работает в большинстве случаев. Однако во всех базах данных, кроме PostgreSQL, сравнение значения DurationField
с арифметикой в экземплярах DateTimeField
не будет работать должным образом.
EmailField
¶
-
class
EmailField
(max_length=254, **options)[исходный код]¶
Класс CharField
, который проверяет, является ли значение действительным адресом электронной почты, используя EmailValidator
.
FileField
¶
-
class
FileField
(upload_to=None, max_length=100, **options)[исходный код]¶
Поле для загрузки файла.
Примечание
Аргумент primary_key
не поддерживается и выдает ошибку, если используется.
Имеет два необязательных аргумента:
-
FileField.
upload_to
¶ Этот атрибут обеспечивает способ указания каталога загрузки и имени файла и может быть установлен двумя способами. В обоих случаях значение передается методу
Storage.save()
.Если вы укажете строковое значение, оно может содержать
strftime()
форматирование, которое будет заменено датой/временем загрузки файла (чтобы загруженные файлы не заполняли заданный каталог). Например:class MyModel(models.Model): # file will be uploaded to MEDIA_ROOT/uploads upload = models.FileField(upload_to='uploads/') # or... # file will be saved to MEDIA_ROOT/uploads/2015/01/30 upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
Если вы используете по умолчанию
FileSystemStorage
, строковое значение будет добавлено к вашему путиMEDIA_ROOT
, чтобы сформировать местоположение в локальной файловой системе, где будут находиться загруженные файлы. Если вы используете другое хранилище, проверьте документацию этого хранилища, чтобы увидеть, как оно обрабатываетupload_to
.upload_to
также может быть вызываемым объектом, например, функцией. Он будет вызван для получения пути загрузки, включая имя файла. Этот вызываемый объект должен принимать два аргумента и возвращать путь в стиле Unix (с косой чертой) для передачи в систему хранения. Два аргумента:Аргумент Описание instance
Экземпляр модели, где определено
FileField
. Более конкретно, это случай, когда текущий файл присоединяется.В большинстве случаев этот объект еще не был сохранен в базе данных, поэтому, если он использует значение по умолчанию
AutoField
, он может еще не иметь значения для своего поля первичного ключа.filename
Имя файла, которое изначально было указано в файле. Это может или не может быть принято во внимание при определении окончательного пути назначения. Например:
def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{1}'.format(instance.user.id, filename) class MyModel(models.Model): upload = models.FileField(upload_to=user_directory_path)
-
FileField.
storage
¶ Объект хранения, который управляет хранением и поиском ваших файлов. Смотрите Управление файлами для получения подробной информации о том, как предоставить этот объект.
Виджетом формы по умолчанию для этого поля является ClearableFileInput
.
Использование FileField
или ImageField
(см. ниже) в модели требует нескольких шагов:
- В вашем файле настроек вам нужно определить
MEDIA_ROOT
в качестве полного пути к каталогу, в котором вы хотите, чтобы Django сохранял загруженные файлы. (Для производительности эти файлы не хранятся в базе данных.) ОпределитеMEDIA_URL
в качестве базового общедоступного URL-адреса этого каталога. Убедитесь, что этот каталог доступен для записи учетной записи веб-сервера. - Добавьте
FileField
илиImageField
к вашей модели, определив параметрupload_to
, чтобы указать подкаталогMEDIA_ROOT
, который будет использоваться для загружаемых файлов. - Все, что будет храниться в вашей базе данных, это путь к файлу (относительно
MEDIA_ROOT
). Вы, скорее всего, захотите использоватьurl
, предоставленный Django. Например, если вашImageField
называетсяmug_shot
, вы можете получить абсолютный путь к вашему изображению в шаблоне с помощью{{ object.mug_shot.url }}
.
Например, скажем, что ваш параметр MEDIA_ROOT
установлен в '/home/media'
, а для upload_to
установлен 'photos/%Y/%m/%d'
. Часть '%Y/%m/%d'
в upload_to
имеет форматирование strftime()
; '%Y'
- четырехзначный год, '%m'
- двузначный месяц, а '% d'
- двузначный день. Если вы загрузите файл 15 января 2007 года, он будет сохранен в каталоге /home/media/photos/2007/01/15
.
Если вы хотите получить имя файла загруженного файла на диске или размер файла, вы можете использовать атрибуты name
и File
соответственно; для получения дополнительной информации о доступных атрибутах и методах см. File
и руководство по темам Управление файлами.
Примечание
Файл сохраняется как часть данных модели в базе данных, поэтому нельзя полагаться на фактическое имя файла, использованное на диске, до тех пор, пока модель не будет сохранена.
Относительный URL загруженного файла можно получить с помощью атрибута url
. Внутренне это вызывает метод url()
базового класса Storage
.
Обратите внимание, что всякий раз, когда вы имеете дело с загруженными файлами, вы должны внимательно следить за тем, где вы их загружаете и какими типами файлов они являются, чтобы избежать дыр в безопасности. Проверьте все загруженные файлы, чтобы убедиться, что файлы соответствуют вашим ожиданиям. Например, если вы слепо разрешаете кому-либо загружать файлы без проверки в каталог, который находится в корне документа вашего веб-сервера, тогда кто-то может загрузить сценарий CGI или PHP и выполнить этот сценарий, посетив его URL на вашем сайте. Не позволяйте этого.
Также обратите внимание, что даже загруженный файл HTML, поскольку он может выполняться браузером (но не сервером), может создавать угрозы безопасности, эквивалентные атакам XSS или CSRF.
Экземпляры FileField
создаются в вашей базе данных как varchar
столбцы с максимальной длиной по умолчанию 100 символов. Как и в других полях, вы можете изменить максимальную длину, используя аргумент max_length
.
FileField
и FieldFile
¶
-
class
FieldFile
[исходный код]¶
Когда вы обращаетесь к FileField
в модели, вам предоставляется экземпляр FieldFile
в качестве прокси для доступа к базовому файлу.
API класса FieldFile
отражает интерфейс класса File
, с одним ключевым отличием: Объект, обернутый классом, не обязательно является оберткой вокруг встроенного в Python файлового объекта. Вместо этого он является оберткой вокруг результата метода Storage.open()
, который может быть File
, или это может быть реализация пользовательского хранилища API File
.
В дополнение к API, унаследованному от File
, такого как read()``и ``write()
, FieldFile
включает в себя несколько методов, которые могут использоваться для взаимодействия с базовым файлом:
Предупреждение
Два метода этого класса save()
и delete()
, по умолчанию сохраняют объект модели связанного FieldFile
в базе данных.
-
FieldFile.
name
¶
Имя файла, включая относительный путь от корня Storage
связанного FileField
.
-
FieldFile.
size
¶
Результат базового метода Storage.size()
.
-
FieldFile.
url
¶
Доступное только для чтения свойство для доступа к относительному URL-адресу файла путем вызова метода url()
базового класса Storage
.
-
FieldFile.
open
(mode='rb')[исходный код]¶
Открывает или повторно открывает файл, связанный с этим экземпляром, в указанном режиме mode
. В отличие от стандартного метода open()
Python, он не возвращает файловый дескриптор.
Поскольку базовый файл открывается неявно при доступе к нему, может не быть нужным вызывать этот метод, кроме как для сброса указателя на базовый файл или для изменения mode
.
-
FieldFile.
close
()[исходный код]¶
Ведет себя как стандартный метод file.close()
Python и закрывает файл, связанный с этим экземпляром.
-
FieldFile.
save
(name, content, save=True)[исходный код]¶
Этот метод берет имя файла и содержимое файла и передает их в класс хранения для поля, а затем связывает сохраненный файл с полем модели. Если вы хотите вручную связать данные файла с экземплярами FileField
в вашей модели, метод save()
используется для сохранения этих данных файла.
Принимает два обязательных аргумента: name
, который является именем файла, и content
, который является объектом, содержащим содержимое файла. Необязательный аргумент save
управляет сохранением экземпляра модели после изменения файла, связанного с этим полем. По умолчанию True
.
Обратите внимание, что аргумент content
должен быть экземпляром django.core.files.File
, а не встроенным файловым объектом Python. Вы можете создать File
из существующего объекта файла Python, например:
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
Или вы можете построить один из строки Python, как здесь:
from django.core.files.base import ContentFile
myfile = ContentFile("hello world")
Для получения дополнительной информации смотрите Управление файлами.
-
FieldFile.
delete
(save=True)[исходный код]¶
Удаляет файл, связанный с этим экземпляром, и очищает все атрибуты в поле. Примечание. Этот метод закрывает файл, если он открывается при вызове delete()
.
Необязательный аргумент save
определяет, будет ли экземпляр модели сохранен после удаления файла, связанного с этим полем. По умолчанию True
.
Обратите внимание, что при удалении модели связанные файлы не удаляются. Если вам нужно очистить потерянные файлы, вам придется обрабатывать их самостоятельно (например, с помощью настраиваемой команды управления, которую можно запускать вручную или запускать по расписанию, например, через cron).
FilePathField
¶
-
class
FilePathField
(path=None, match=None, recursive=False, max_length=100, **options)[исходный код]¶
A CharField
, выбор которого ограничен именами файлов в определенном каталоге файловой системы. Имеет три специальных аргумента, первый из которых обязателен:
-
FilePathField.
path
¶ Необходимые. Абсолютный путь файловой системы к каталогу, из которого
FilePathField
должен получить свой выбор. Пример:"/home/images"
.
-
FilePathField.
match
¶ По желанию. Регулярное выражение в виде строки, которое
FilePathField
будет использовать для фильтрации имен файлов. Обратите внимание, что регулярное выражение будет применяться к базовому имени файла, а не к полному пути. Пример:"foo.*\.txt$"
, который будет соответствовать файлу с именемfoo23.txt
, но неbar.txt
илиfoo23.png
.
-
FilePathField.
recursive
¶ По желанию. Либо
True
, либоFalse
. По умолчанию установлено значениеFalse
. Указывает, должны ли быть включены все подкаталогиpath
-
FilePathField.
allow_files
¶ По желанию. Либо
True
, либоFalse
. По умолчанию установлено значениеTrue
. Указывает, следует ли включать файлы в указанном месте. Либо это, либоallow_folders
должно бытьTrue
.
-
FilePathField.
allow_folders
¶ По желанию. Либо
True
, либоFalse
. По умолчанию установлено значениеFalse
. Указывает, следует ли включать папки в указанном месте. Либо это, либоallow_files
должно бытьTrue
.
Конечно, эти аргументы могут быть использованы вместе.
Одна потенциальная ошибка заключается в том, что match
применяется к базовому имени файла, а не к полному пути. Итак, этот пример
FilePathField(path="/home/images", match="foo.*", recursive=True)
…будет соответствовать /home/images/foo.png
, но не /home/images/foo/bar.png
, потому что match
применяется к базовому имени файла (foo.png
и bar.png
).
Экземпляры FilePathField
создаются в вашей базе данных как varchar
столбцы с максимальной длиной по умолчанию 100 символов. Как и в других полях, вы можете изменить максимальную длину, используя аргумент max_length
.
FloatField
¶
-
class
FloatField
(**options)[исходный код]¶
Число с плавающей точкой, представленное в Python экземпляром float
.
Виджетом формы по умолчанию для этого поля является NumberInput
, когда localize
False
или TextInput
в противном случае.
FloatField
или DecimalField
Класс FloatField
иногда сопоставляют с классом DecimalField
. Хотя они оба представляют действительные числа, они представляют эти числа по-разному. FloatField
использует внутри Python тип float
, а DecimalField
использует тип Decimal
. Информацию о разнице между ними смотрите в документации Python для модуля decimal
.
ImageField
¶
-
class
ImageField
(upload_to=None, height_field=None, width_field=None, max_length=100, **options)[исходный код]¶
Наследует все атрибуты и методы из FileField
, но также проверяет, что загруженный объект является допустимым изображением.
В дополнение к специальным атрибутам, которые доступны для FileField
, ImageField
также имеет атрибуты height
и width
.
Чтобы упростить запросы к этим атрибутам, ImageField
имеет два дополнительных необязательных аргумента:
-
ImageField.
height_field
¶ Имя поля модели, которое будет автоматически заполняться высотой изображения при каждом сохранении экземпляра модели.
-
ImageField.
width_field
¶ Имя поля модели, которое будет автоматически заполняться шириной изображения при каждом сохранении экземпляра модели.
Требуется библиотека Pillow.
Экземпляры ImageField
создаются в вашей базе данных как varchar
столбцы с максимальной длиной по умолчанию 100 символов. Как и в других полях, вы можете изменить максимальную длину, используя аргумент max_length
.
Виджетом формы по умолчанию для этого поля является ClearableFileInput
.
IntegerField
¶
-
class
IntegerField
(**options)[исходный код]¶
Целое число. Значения от -2147483648
до 2147483647
безопасны во всех базах данных, поддерживаемых Django.
Он использует MinValueValidator
и MaxValueValidator
для проверки ввода на основе значений, которые поддерживает база данных по умолчанию.
Виджетом формы по умолчанию для этого поля является NumberInput
, когда localize
False
или TextInput
в противном случае.
GenericIPAddressField
¶
-
class
GenericIPAddressField
(protocol='both', unpack_ipv4=False, **options)[исходный код]¶
Адрес IPv4 или IPv6 в строковом формате (например, 192.0.2.30
или 2a02:42fe::4
). Виджет формы по умолчанию для этого поля TextInput
.
Ниже приведена нормализация адреса IPv6 RFC 4291#section-2.2 раздел 2.2, включая использование формата IPv4, предложенного в параграфе 3 этого раздела, например ::ffff:192.0.2.0
. Например, 2001:0: 0:01
будет нормализовано до 2001::1
, а ::ffff:0a0a:0a0a
до ::ffff:10.10.10.10
. Все символы конвертируются в нижний регистр.
-
GenericIPAddressField.
protocol
¶ Ограничивает допустимый ввод указанным протоколом. Допустимые значения:
'both'
(по умолчанию),'IPv4'
или'IPv6'
. Соответствие регистронезависимо.
-
GenericIPAddressField.
unpack_ipv4
¶ Ограничивает допустимый ввод указанным протоколом. Допустимые значения:
'both'
(по умолчанию),'IPv4'
или'IPv6'
. Соответствие регистронезависимо….
Если вы разрешаете пустые значения, вы должны разрешить нулевые значения, так как пустые значения сохраняются как нулевые.
NullBooleanField
¶
-
class
NullBooleanField
(**options)[исходный код]¶
Например BooleanField
с null=True
. Используйте это вместо этого поля, так как оно может быть устаревшим в будущей версии Django.
PositiveIntegerField
¶
-
class
PositiveIntegerField
(**options)[исходный код]¶
Подобно IntegerField
, но должно быть либо положительным, либо нулевым (0
). Значения от 0
до 2147483647
безопасны во всех базах данных, поддерживаемых Django. Значение 0
принимается по причинам обратной совместимости.
PositiveSmallIntegerField
¶
-
class
PositiveSmallIntegerField
(**options)[исходный код]¶
Как и PositiveIntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от 0
до 32767
безопасны во всех базах данных, поддерживаемых Django.
SlugField
¶
-
class
SlugField
(max_length=50, **options)[исходный код]¶
Slug - газетный термин. Слаг - это короткая метка для чего-либо, содержащая только буквы, цифры, подчеркивания или дефисы. Они обычно используются в URL.
Как и в случае CharField, вы можете указать max_length
(читайте заметку о переносимости базы данных и max_length
в этом разделе). Если max_length
не указан, Django будет использовать длину по умолчанию 50.
Подразумевает установку Field.db_index
в True
.
Часто полезно автоматически предварительно заполнить поле SlugField на основе значения некоторого другого значения. Вы можете сделать это автоматически в админке, используя prepopulated_fields
.
Он использует validate_slug
или validate_unicode_slug
для проверки.
-
SlugField.
allow_unicode
¶ Если
True
, поле принимает символы Unicode в дополнение к символам ASCII. По умолчаниюFalse
.
SmallIntegerField
¶
-
class
SmallIntegerField
(**options)[исходный код]¶
Подобно IntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от -32768
до 32767
безопасны во всех базах данных, поддерживаемых Django.
TextField
¶
-
class
TextField
(**options)[исходный код]¶
Большое текстовое поле. Виджет формы по умолчанию для этого поля Textarea
.
Если вы укажете атрибут max_length
, он будет отражен в виджете Textarea
автоматически сгенерированного поля формы. Однако это не применяется на уровне модели или базы данных. Для этого используйте CharField
.
TimeField
¶
-
class
TimeField
(auto_now=False, auto_now_add=False, **options)[исходный код]¶
Время, представленное в Python экземпляром datetime.time
. Принимает те же параметры автоматического заполнения, что и DateField
.
Виджет формы по умолчанию для этого поля TextInput
. В админке добавляется несколько скриптов JavaScript.
URLField
¶
-
class
URLField
(max_length=200, **options)[исходный код]¶
CharField
для URL, проверяется валидатором URLValidator
.
Виджет формы по умолчанию для этого поля TextInput
.
Как и все подклассы CharField
, URLField
принимает необязательный аргумент max_length
. Если вы не укажете max_length
, используется значение по умолчанию 200.
UUIDField
¶
-
class
UUIDField
(**options)[исходный код]¶
Поле для хранения универсально уникальных идентификаторов. Использует класс Python UUID
. При использовании в PostgreSQL сохраняется в типе данных uuid
, иначе в char(32)
.
Универсально уникальные идентификаторы являются хорошей альтернативой AutoField
для primary_key
. База данных не будет генерировать UUID для вас, поэтому рекомендуется использовать default
:
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
Обратите внимание, что вызываемый (без круглых скобок) передается в default
, а не в экземпляр UUID
.
Поиск в PostgreSQL
Использование iexact
, contains
, icontains
, startswith
, istartswith
, endswith
, или iendswith
при поиске в PostgreSQL не работает для значений без дефисов, потому что PostgreSQL хранит их в типе переноса с типом uuid.
Справочник API полей¶
-
class
Field
[исходный код]¶ Field
- абстрактный класс, представляющий столбец таблицы базы данных. Django использует поля для создания таблицы базы данных (db_type()
), для отображения типов Python в базу данных (get_prep_value()
) и наоборот (from_db_value()
).Таким образом, поле является фундаментальной частью в различных API Django, а именно
модели
инаборы запросов
.В моделях поле создается как атрибут класса и представляет определенный столбец таблицы, см. Модели. Он имеет такие атрибуты, как
null
иunique
, а также методы, которые Django использует для сопоставления значения поля со значениями, специфичными для базы данных.Field
является подклассомRegisterLookupMixin
и, следовательно, иTransform
иLookup
может быть зарегистрирован для использования вQuerySet
(например,field_name__exact="foo"
). Все встроенные фильтры зарегистрированы по умолчанию.Все встроенные поля Django, такие как
CharField
, являются конкретными реализациямиField
. Если вам нужно настраиваемое поле, вы можете создать подкласс любого из встроенных полей или написатьField
с нуля. В любом случае смотрите Написание пользовательских полей модели.-
description
¶ Подробное описание поля, например, для приложения
django.contrib.admindocs
.Описание может иметь вид:
description = _("String (up to %(max_length)s)")
где аргументы интерполируются из поля
__dict__
.
Чтобы сопоставить
Field
с типом, специфичным для базы данных, Django предлагает несколько методов:-
get_internal_type
()[исходный код]¶ Возвращает строку с именем этого поля для конкретных целей бэкэнда. По умолчанию возвращает имя класса.
Смотрите Эмуляция встроенных типов полей для использования в пользовательских полях.
-
db_type
(connection)[исходный код]¶ Возвращает тип данных столбца базы данных для
Field
с учетомconnection
.Смотрите Пользовательские типы баз данных для использования в пользовательских полях.
-
rel_db_type
(connection)[исходный код]¶ Возвращает тип данных столбца базы данных для таких полей, как
ForeignKey
иOneToOneField
, которые указывают наField
, с учетомconnection
.Смотрите Пользовательские типы баз данных для использования в пользовательских полях.
Существует три основных ситуации, в которых Django должен взаимодействовать с базой данных и полями базы данных:
- когда он запрашивает базу данных (значение Python -> значение базы данных)
- когда он загружает данные из базы данных (значение базы данных -> значение Python)
- когда он сохраняется в базе данных (значение Python -> значение базы данных)
При запросах используются
get_db_prep_value()
иget_prep_value()
:-
get_prep_value
(value)[исходный код]¶ value
- это текущее значение атрибута модели, и метод должен возвращать данные в формате, подготовленном для использования в качестве параметра в запросе.См. Преобразование объектов Python в значения запроса для использования.
-
get_db_prep_value
(value, connection, prepared=False)[исходный код]¶ Преобразует
value
в специфичное для бэкенда значение. По умолчанию возвращаетсяvalue
еслиprepare=True
иget_prep_value()
еслиFalse
.См. Преобразование значений запроса в значения базы данных для использования.
При загрузке данных используется
from_db_value()
:-
from_db_value
(value, expression, connection)¶ Преобразует значение, возвращаемое базой данных, в объект Python. Это обратная сторона
get_prep_value()
.Этот метод не используется для большинства встроенных полей, так как серверная часть базы данных уже возвращает правильный тип Python, или сама серверная часть выполняет преобразование.
Смотрите Преобразование значений в объекты Python для использования.
Примечание
По соображениям производительности
from_db_value
не реализовано как запрет на поля, которые не требуют этого (все поля Django). Следовательно, вы не можете вызватьsuper
в вашем определении.
При сохранении используются
pre_save()
иget_db_prep_save()
:-
get_db_prep_save
(value, connection)[исходный код]¶ То же, что
get_db_prep_value()
, но вызывается, когда значение поля должно быть сохранено в базе данных. По умолчанию возвращаетget_db_prep_value()
.
-
pre_save
(model_instance, add)[исходный код]¶ Метод, вызываемый до
get_db_prep_save()
, чтобы подготовить значение перед сохранением (например, дляDateField.auto_now
).model_instance
- это экземпляр, которому принадлежит это поле, аadd
указывает, сохраняется ли экземпляр в базу данных в первый раз.Он должен вернуть значение соответствующего атрибута из
model_instance
для этого поля. Имя атрибута находится вself.attname
(это настраивается с помощьюField
).Смотрите Предварительная обработка значений перед сохранением для использования.
Поля часто получают свои значения в виде другого типа, либо из сериализации, либо из форм.
-
to_python
(value)[исходный код]¶ Преобразует значение в правильный объект Python. Он действует как противоположность
value_to_string()
и также вызывается вclean()
.Смотрите Преобразование значений в объекты Python для использования.
Помимо сохранения в базе данных, поле также должно знать, как сериализовать его значение:
-
value_from_object
(obj)[исходный код]¶ Возвращает значение поля для данного экземпляра модели.
Этот метод часто используется методом
value_to_string()
.
-
value_to_string
(obj)[исходный код]¶ Преобразует
obj
в строку. Используется для сериализации значения поля.Смотрите Преобразование полевых данных для сериализации для использования.
При использовании
модельных форм
,Field
должно знать, в каком поле формы оно должно быть представлено:-
formfield
(form_class=None, choices_form_class=None, **kwargs)[исходный код]¶ Возвращает значение по умолчанию
django.forms.Field
этого поля дляModelForm
.По умолчанию, если оба
form_class
иchoices_form_class
являютсяNone
, он используетCharField
. Если в поле естьchoices
иchoices_form_class
не указано, оно используетTypedChoiceField
.Смотрите Указание поля формы для поля модели для использования.
-
deconstruct
()[исходный код]¶ Возвращает кортеж из 4-х значений с достаточным количеством информации для воссоздания поля:
- Название поля в модели.
- Путь импорта поля (например,
"django.db.models.IntegerField"
). Это должна быть самая портативная версия, поэтому менее конкретная может быть лучше. - Список позиционных аргументов.
- Словарь ключевых аргументов.
Этот метод должен быть добавлен в поля до версии 1.7 для переноса его данных с помощью Миграции.
-
Справочник атрибутов поля¶
Каждый экземпляр Field
содержит несколько атрибутов, которые позволяют проанализировать его поведение. Используйте эти атрибуты вместо проверок isinstance
, когда вам нужно написать код, который зависит от функциональности поля. Эти атрибуты могут использоваться вместе с Model._meta API, чтобы сузить поиск для определенных типов полей. Пользовательские поля модели должны реализовывать эти флаги.
Атрибуты для полей¶
-
Field.
auto_created
¶ Логический флаг, который указывает, было ли поле создано автоматически, например,
OneToOneField
, используемый наследованием модели.
-
Field.
concrete
¶ Логический флаг, который указывает, имеет ли поле столбец в базе данных, связанный с ним.
Логический флаг, который указывает, используется ли поле для поддержки функциональности другого не скрытого поля (например, поля
content_type
иobject_id
, которые составляютGenericForeignKey
). Флагhidden
используется для того, чтобы отличить то, что составляет общедоступное подмножество полей модели от всех полей модели.Примечание
Options.get_fields ()
исключает скрытые поля по умолчанию. Передайтеinclude_hidden=True
, чтобы вернуть скрытые поля в результаты.
-
Field.
is_relation
¶ Логический флаг, который указывает, содержит ли поле ссылки на одну или несколько других моделей для его функциональности (например,
ForeignKey
,ManyToManyField
,OneToOneField
и т.д.).
-
Field.
model
¶ Возвращает модель, для которой определено поле. Если поле определено в суперклассе модели,
model
будет ссылаться на суперкласс, а не на класс экземпляра.
Атрибуты для полей с отношениями¶
Эти атрибуты используются для запроса количества элементов и других деталей отношения. Эти атрибуты присутствуют во всех полях; однако они будут иметь логические значения (а не None
), если поле имеет тип отношения (Field.is_relation=True
).
-
Field.
many_to_many
¶ Логический флаг, который устанавливается в
True
, если поле имеет отношение «многие ко многим»; иначеFalse
. Единственное поле, включенное в Django, гдеTrue
, этоManyToManyField
.
-
Field.
many_to_one
¶ Логический флаг, устанавливаемый в
True
, если поле имеет отношение многие-к-одному, например,ForeignKey
; иначе``False``.
-
Field.
one_to_many
¶ Логический флаг, устанавливаемый в
True
, если поле имеет отношение один ко многим, такое какGenericRelation
или обратное дляForeignKey
; иначеFalse
.
-
Field.
one_to_one
¶ Логический флаг, устанавливаемый в
True
, если поле имеет взаимно-однозначное отношение, напримерOneToOneField
; иначе``False``.
Указывает на модель, к которой относится поле. Например,
Author
вForeignKey(Author, on_delete=models.CASCADE)
.Related_model
дляGenericForeignKey
всегдаNone
.