Ссылка на поле модели ¶
Этот документ содержит все ссылки АНИ из Field
включая
параметры полей и типы полей 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, B), (A, B) ...]
Первый элемент в каждом кортеже - это фактическое значение, которое должно быть установлено в модели, а второй элемент - это удобочитаемое имя. Например:
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
]
Как правило, лучше всего определять варианты выбора внутри класса модели и определять константу с подходящим именем для каждого значения:
from django.db import models
class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
GRADUATE = 'GR'
YEAR_IN_SCHOOL_CHOICES = [
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
(GRADUATE, 'Graduate'),
]
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
Типы перечисления ¶
Кроме того, Django предоставляет типы перечисления, которые можно разделить на подклассы для краткого определения вариантов:
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
class YearInSchool(models.TextChoices):
FRESHMAN = 'FR', _('Freshman')
SOPHOMORE = 'SO', _('Sophomore')
JUNIOR = 'JR', _('Junior')
SENIOR = 'SR', _('Senior')
GRADUATE = 'GR', _('Graduate')
year_in_school = models.CharField(
max_length=2,
choices=YearInSchool.choices,
default=YearInSchool.FRESHMAN,
)
def is_upperclass(self):
return self.year_in_school in {
self.YearInSchool.JUNIOR,
self.YearInSchool.SENIOR,
}
Они работают аналогично enum
стандартной библиотеке Python, но с некоторыми изменениями:
- Значения членов перечисления - это кортеж аргументов, используемых при построении конкретного типа данных. Django поддерживает добавление дополнительного строкового значения в конец этого кортежа, которое будет использоваться в качестве удобочитаемого имени, или
label
.label
Может быть ленивым переводимые строки. Таким образом, в большинстве случаев значение члена будет двухкортежным. См. Ниже пример выбора подкласса с использованием более сложного типа данных. Если кортеж не указан, или последний элемент не является (ленивые) строка, то это автоматически генерируется из имени элемента.(value, label)
label
.label
Свойство добавляется на значения, чтобы вернуть имя удобочитаемый.- Ряд пользовательских свойств добавляется к классам счетных -
.choices
,.labels
,.values
, и.names
- чтобы сделать его проще списки доступа этих отдельных частей перечисления. Используйте.choices
как подходящее значение для переходаchoices
в определение поля. - Использование
enum.unique()
принудительно, чтобы гарантировать, что значения не могут быть определены несколько раз. Этого вряд ли можно ожидать при выборе поля.
Обратите внимание, что использование YearInSchool.SENIOR
, YearInSchool['SENIOR']
или
YearInSchool('SR')
для доступа или поиска членов перечисления работает должным образом, как .name
и .value
свойства и для членов.
Если вам не нужно переводить удобочитаемые имена, вы можете вывести их из имени члена (заменив подчеркивание пробелами и используя регистр заголовка):
>>> class Vehicle(models.TextChoices):
... CAR = 'C'
... TRUCK = 'T'
... JET_SKI = 'J'
...
>>> Vehicle.JET_SKI.label
'Jet Ski'
Поскольку случай, когда значения перечисления должны быть целыми числами, чрезвычайно распространен, Django предоставляет IntegerChoices
класс. Например:
class Card(models.Model):
class Suit(models.IntegerChoices):
DIAMOND = 1
SPADE = 2
HEART = 3
CLUB = 4
suit = models.IntegerField(choices=Suit.choices)
Также можно использовать Enum Functional API с оговоркой, что метки создаются автоматически, как указано выше:
>>> MedalType = models.TextChoices('MedalType', 'GOLD SILVER BRONZE')
>>> MedalType.choices
[('GOLD', 'Gold'), ('SILVER', 'Silver'), ('BRONZE', 'Bronze')]
>>> Place = models.IntegerChoices('Place', 'FIRST SECOND THIRD')
>>> Place.choices
[(1, 'First'), (2, 'Second'), (3, 'Third')]
Если вам требуется поддержка конкретного типа данных, отличного от int
или str
, вы можете создать подкласс Choices
и требуемый конкретный тип данных, например,
date
для использования с DateField
:
class MoonLandings(datetime.date, models.Choices):
APOLLO_11 = 1969, 7, 20, 'Apollo 11 (Eagle)'
APOLLO_12 = 1969, 11, 19, 'Apollo 12 (Intrepid)'
APOLLO_14 = 1971, 2, 5, 'Apollo 14 (Antares)'
APOLLO_15 = 1971, 7, 30, 'Apollo 15 (Falcon)'
APOLLO_16 = 1972, 4, 21, 'Apollo 16 (Orion)'
APOLLO_17 = 1972, 12, 11, 'Apollo 17 (Challenger)'
Следует помнить о некоторых дополнительных предостережениях:
Типы перечисления не поддерживают именованные группы .
Поскольку перечисление с конкретным типом данных требует, чтобы все значения соответствовали типу, переопределение пустой метки не может быть достигнуто путем создания члена со значением
None
. Вместо этого установите__empty__
атрибут в классе:class Answer(models.IntegerChoices): NO = 0, _('No') YES = 1, _('Yes') __empty__ = _('(Unknown)')
db_column
¶
-
Field.
db_column
¶
Имя столбца базы данных, используемого для этого поля. Если это не указано, Django будет использовать имя поля.
Если имя столбца вашей базы данных является зарезервированным словом SQL или содержит символы, недопустимые в именах переменных Python, в частности дефис, - это нормально. Django цитирует имена столбцов и таблиц за кулисами.
db_tablespace
¶
-
Field.
db_tablespace
¶
Имя табличного пространства базы данных, которое будет использоваться для индекса этого поля, если это поле проиндексировано. По умолчанию используется параметр проекта
DEFAULT_INDEX_TABLESPACE
, если он установлен, или
db_tablespace
параметр модели, если он есть. Если серверная часть не поддерживает табличные пространства для индексов, этот параметр игнорируется.
default
¶
-
Field.
default
¶
Значение по умолчанию для поля. Это может быть значение или вызываемый объект. Если вызываемый, он будет вызываться каждый раз при создании нового объекта.
По умолчанию не может быть изменяемым объектом (экземпляр модели, list
, set
и т.д.), в качестве ссылки на тот же экземпляр этого объекта будет использоваться в качестве значения по умолчанию во всех новых экземплярах модели. Вместо этого оберните желаемое значение по умолчанию в вызываемый. Например, если вы хотите указать значение dict
по умолчанию для
JSONField
, используйте функцию:
def contact_default():
return {"email": "[email protected]"}
contact_info = JSONField("ContactInfo", default=contact_default)
lambda
s нельзя использовать для параметров поля, например, 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
. Дополнительные ключи сообщений об ошибках указаны для каждого поля в разделе Типы полей ниже.
Эти сообщения об ошибках часто не передаются в формы. См . Замечания относительно 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 автоматически добавит поле для хранения первичного ключа, поэтому вам не нужно устанавливать primary_key=True
какие-либо поля, если вы не хотите переопределить поведение первичного ключа по умолчанию. Тип автоматически создаваемых полей первичного ключа можно указать для каждого приложения AppConfig.default_auto_field
или глобально в
DEFAULT_AUTO_FIELD
настройках. Дополнительные сведения см. В разделе
Автоматические поля первичного ключа .
primary_key=True
подразумевает null=False
и
unique=True
. Для объекта разрешен только один первичный ключ.
Поле первичного ключа доступно только для чтения. Если вы измените значение первичного ключа на существующем объекте, а затем сохраните его, новый объект будет создан рядом со старым.
В более старых версиях автоматически создаваемые поля первичного ключа всегда были
AutoField
s.
unique
¶
-
Field.
unique
¶
Если True
, это поле должно быть уникальным во всей таблице.
Это обеспечивается на уровне базы данных и проверкой модели. Если вы попытаетесь сохранить модель с повторяющимся значением в unique
поле, метод django.db.IntegrityError
модели поднимет
a 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
.
Обратите внимание, что если вы установите для этого параметра значение a 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
¶
-
класс
AutoField
( ** варианты ) ¶
Значение, IntegerField
которое автоматически увеличивается в соответствии с доступными идентификаторами. Обычно вам не нужно использовать это напрямую; поле первичного ключа будет автоматически добавлено в вашу модель, если вы не укажете иное. См. Автоматические поля первичного ключа .
BigAutoField
¶
-
класс
BigAutoField
( ** варианты ) ¶
64-битное целое число, очень похожее на an, AutoField
за исключением того, что оно гарантированно соответствует числам от 1
до 9223372036854775807
.
BigIntegerField
¶
-
класс
BigIntegerField
( ** варианты ) ¶
64-битное целое число, очень похожее на an, IntegerField
за исключением того, что оно гарантированно соответствует числам от -9223372036854775808
до
9223372036854775807
. Виджет формы по умолчанию для этого поля -
NumberInput
.
BinaryField
¶
-
class
BinaryField
( max_length = None , ** варианты ) ¶
Поле для хранения необработанных двоичных данных. Он может быть назначен bytes
,
bytearray
или memoryview
.
По умолчанию BinaryField
устанавливается editable
на False
, в этом случае она не может быть включена в ModelForm
.
BinaryField
имеет один дополнительный необязательный аргумент:
-
BinaryField.
max_length
¶ Максимальная длина (в символах) поля. Максимальная длина принудительно устанавливается при проверке Django с использованием
MaxLengthValidator
.
Злоупотребление BinaryField
Хотя вы можете подумать о хранении файлов в базе данных, считайте, что это плохой дизайн в 99% случаев. Это поле не заменяет правильную обработку статических файлов .
BooleanField
¶
-
класс
BooleanField
( ** варианты ) ¶
Поле истина / ложь.
Виджет формы по умолчанию для этого поля - CheckboxInput
, или NullBooleanSelect
если null=True
.
Значение по умолчанию BooleanField
- None
когда Field.default
не определено.
CharField
¶
-
class
CharField
( max_length = None , ** варианты ) ¶
Строковое поле для строк от маленького до большого.
Для больших объемов текста используйте TextField
.
Виджет формы по умолчанию для этого поля - TextInput
.
CharField
имеет два дополнительных аргумента:
-
CharField.
max_length
¶ Обязательный. Максимальная длина (в символах) поля. Max_length применяется на уровне базы данных и при проверке Django с использованием
MaxLengthValidator
.Примечание
Если вы пишете приложение, которое должно быть переносимым на несколько бэкэндов, вы должны знать, что
max_length
для некоторых бэкэндов существуют ограничения . См. Подробности в примечаниях к серверу базы данных .
-
CharField.
db_collation
¶ - Новое в Django 3.2.
По желанию. Имя поля сортировки базы данных.
Примечание
Имена параметров сортировки не стандартизированы. Таким образом, это не будет переносимым между несколькими бэкэндами базы данных.
Oracle
Oracle поддерживает сопоставления, только если для
MAX_STRING_SIZE
параметра инициализации базы данных установлено значениеEXTENDED
.
DateField
¶
-
class
DateField
( auto_now = False , auto_now_add = False , ** параметры ) ¶
Дата, представленная в 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()
- Для
Виджет формы по умолчанию для этого поля -
DateInput
. Администратор добавляет календарь 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
вместо a DateField
и решая, как обрабатывать преобразование из datetime в date во время отображения.
DateTimeField
¶
-
class
DateTimeField
( auto_now = False , auto_now_add = False , ** параметры ) ¶
Дата и время, представленные в Python datetime.datetime
экземпляром. Принимает те же дополнительные аргументы, что и DateField
.
Виджет формы по умолчанию для этого поля - одиночный
DateTimeInput
. Администратор использует два отдельных
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
¶
-
класс
DurationField
( ** варианты ) ¶
Поле для хранения периодов времени - смоделировано на Python с помощью
timedelta
. При использовании в PostgreSQL используется тип данных, interval
а в Oracle тип данных . В противном случае используется микросекунды.INTERVAL DAY(9) TO
SECOND(6)
bigint
Примечание
Арифметика с DurationField
работает в большинстве случаев. Однако во всех базах данных, кроме PostgreSQL, сравнение значения a DurationField
с арифметическим на DateTimeField
экземплярах не будет работать должным образом.
EmailField
¶
-
class
EmailField
( max_length = 254 , ** варианты ) ¶
CharField
, Что проверяет , что значение является действительным адресом электронной почты , используя
EmailValidator
.
FileField
¶
-
class
FileField
( upload_to = None , max_length = 100 , ** options ) ¶
Поле для загрузки файла.
Примечание
primary_key
Аргумент не поддерживается и вызовет ошибку , если используется.
Имеет два необязательных аргумента:
-
FileField.
upload_to
¶ Этот атрибут обеспечивает способ установки каталога загрузки и имени файла и может быть установлен двумя способами. В обоих случаях значение передается
Storage.save()
методу.Если вы укажете строковое значение или a
Path
, оно может содержать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
¶ Объект хранения или вызываемый объект, который возвращает объект хранения. Это управляет хранением и поиском ваших файлов. См. Управление файлами для получения подробной информации о том, как предоставить этот объект.
Изменено в Django 3.1:Добавлена возможность предоставлять вызываемый объект.
Виджет формы по умолчанию для этого поля -
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
IS strftime()
форматирования;
'%Y'
- год из четырех цифр, '%m'
месяц '%d'
из двух цифр и день из двух цифр. Если вы загрузите файл 15 января 2007 г., он будет сохранен в каталоге /home/media/photos/2007/01/15
.
Если вы хотите получить на диске имя файла загруженного файла в, или размер файла, вы можете использовать name
и
size
атрибуты соответственно; Дополнительные сведения о доступных атрибутах и методах см. в File
справочнике по
классам и в
разделе « Управление файлами» .
Примечание
Файл сохраняется как часть сохранения модели в базе данных, поэтому на фактическое имя файла, используемое на диске, нельзя полагаться до тех пор, пока модель не будет сохранена.
Относительный URL загруженного файла можно получить с помощью
url
атрибута. Внутри это вызывает url()
метод базового Storage
класса.
Обратите внимание, что всякий раз, когда вы имеете дело с загруженными файлами, вы должны обращать пристальное внимание на то, куда вы их загружаете и какой это тип файлов, чтобы избежать дыр в безопасности. Проверьте все загруженные файлы, чтобы убедиться, что они соответствуют вашим представлениям. Например, если вы слепо позволяете кому-то загружать файлы без проверки в каталог, который находится в корне документов вашего веб-сервера, то кто-то может загрузить сценарий CGI или PHP и выполнить этот сценарий, посетив его URL-адрес на вашем сайте. Не позволяй этого.
Также обратите внимание, что даже загруженный файл HTML, поскольку он может быть выполнен браузером (но не сервером), может представлять угрозы безопасности, эквивалентные атакам XSS или CSRF.
FileField
экземпляры создаются в вашей базе данных в виде varchar
столбцов с максимальной длиной по умолчанию 100 символов. Как и в случае с другими полями, вы можете изменить максимальную длину с помощью max_length
аргумента.
FileField
и FieldFile
¶
-
класс
FieldFile
¶
Когда вы получаете доступ к FileField
модели, вам предоставляется экземпляр FieldFile
в качестве прокси для доступа к базовому файлу.
API-интерфейс FieldFile
отражает API-интерфейс File
с одним ключевым отличием: объект, обернутый классом, не обязательно является оболочкой для встроенного файлового объекта Python. Вместо этого это оболочка вокруг результата Storage.open()
метода, который может быть File
объектом, или это может быть реализация File
API пользовательского хранилища .
В дополнение к API, унаследованному от File
таких как
read()
и write()
, FieldFile
включает несколько методов, которые могут использоваться для взаимодействия с базовым файлом:
Предупреждение
Два метода этого класса save()
и по
delete()
умолчанию сохраняют объект модели связанного FieldFile
в базе данных.
-
FieldFile.
name
¶
Имя файла, включая относительный путь от корня Storage
связанного
файла
FileField
.
-
FieldFile.
path
¶
Свойство только для чтения для доступа к пути к локальной файловой системе файла путем вызова
path()
метода базового
Storage
класса.
-
FieldFile.
size
¶
Результат базового Storage.size()
метода.
-
FieldFile.
url
¶
Свойство только для чтения для доступа к относительному URL-адресу файла путем вызова
url()
метода базового
Storage
класса.
-
FieldFile.
open
( режим = 'rb' ) ¶
Открывает или повторно открывает файл, связанный с этим экземпляром в указанном
mode
. В отличие от стандартного open()
метода Python , он не возвращает дескриптор файла.
Поскольку базовый файл открывается неявно при доступе к нему, может быть ненужным вызывать этот метод, кроме как для сброса указателя на базовый файл или для изменения mode
.
-
FieldFile.
close
() ¶
Действует как стандартный file.close()
метод Python и закрывает файл, связанный с этим экземпляром.
-
FieldFile.
save
( Имя , содержание , сохранить = True ) ¶
Этот метод принимает имя файла и содержимое файла и передает их классу хранения для поля, а затем связывает сохраненный файл с полем модели. Если вы хотите вручную связать данные файла с
FileField
экземплярами в вашей модели, этот save()
метод используется для сохранения данных файла.
Принимает два обязательных аргумента: name
имя файла и
content
объект, содержащий его содержимое. Необязательный save
аргумент определяет, будет ли экземпляр модели сохранен после изменения файла, связанного с этим полем. По умолчанию
True
.
Обратите внимание, что content
аргумент должен быть экземпляром
django.core.files.File
, а не встроенным файловым объектом Python. Вы можете создать a 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
( сохранить = True ) ¶
Удаляет файл, связанный с этим экземпляром, и очищает все атрибуты поля. Примечание. Этот метод закроет файл, если он окажется открытым при
delete()
вызове.
Необязательный save
аргумент определяет, будет ли экземпляр модели сохранен после удаления файла, связанного с этим полем. По умолчанию
True
.
Обратите внимание, что при удалении модели связанные файлы не удаляются. Если вам нужно очистить потерянные файлы, вам нужно будет обработать это самостоятельно (например, с помощью специальной команды управления, которую можно запускать вручную или по расписанию для периодического запуска, например, cron).
FilePathField
¶
-
class
FilePathField
( path = '' , match = None , recursive = False , allow_files = True , allow_folders = False , max_length = 100 , ** options ) ¶
A, CharField
чей выбор ограничен именами файлов в определенном каталоге файловой системы. Имеет некоторые специальные аргументы, из которых требуется первый
:
-
FilePathField.
path
¶ Обязательный. Абсолютный путь файловой системы к каталогу, из которого он
FilePathField
должен получать свои варианты выбора. Пример:"/home/images"
.path
также может быть вызываемым, например функцией для динамической установки пути во время выполнения. Пример:import os from django.conf import settings from django.db import models def images_path(): return os.path.join(settings.LOCAL_FILE_DIR, 'images') class MyModel(models.Model): file = models.FilePathField(path=images_path)
-
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
¶
-
класс
FloatField
( ** варианты ) ¶
Число с плавающей запятой, представленное в Python float
экземпляром.
Виджет формы по умолчанию для этого поля - NumberInput
когда localize
есть False
или
TextInput
нет.
FloatField
против. DecimalField
FloatField
Класс иногда смешивается с
DecimalField
классом. Хотя оба они представляют собой действительные числа, они представляют эти числа по-разному. FloatField
использует float
тип Python внутри, а DecimalField
использует Decimal
тип Python . Информацию о различиях между ними см. В документации Python к decimal
модулю.
ImageField
¶
-
class
ImageField
( upload_to = None , height_field = None , width_field = None , max_length = 100 , ** параметры ) ¶
Наследует все атрибуты и методы от FileField
, но также проверяет, является ли загруженный объект допустимым изображением.
В дополнение к специальным атрибутам, которые доступны для FileField
, ImageField
также height
и width
атрибуты.
Для облегчения запросов к этим атрибутам ImageField
есть два дополнительных необязательных аргумента:
-
ImageField.
height_field
¶ Имя поля модели, которое будет автоматически заполняться высотой изображения при каждом сохранении экземпляра модели.
-
ImageField.
width_field
¶ Имя поля модели, которое будет автоматически заполняться шириной изображения при каждом сохранении экземпляра модели.
Требуется библиотека подушек .
ImageField
экземпляры создаются в вашей базе данных в виде varchar
столбцов с максимальной длиной по умолчанию 100 символов. Как и в случае с другими полями, вы можете изменить максимальную длину с помощью max_length
аргумента.
Виджет формы по умолчанию для этого поля -
ClearableFileInput
.
IntegerField
¶
-
класс
IntegerField
( ** варианты ) ¶
Целое число. Значения от -2147483648
до 2147483647
безопасны во всех базах данных, поддерживаемых Django.
Он использует MinValueValidator
и
MaxValueValidator
для проверки ввода на основе значений, поддерживаемых базой данных по умолчанию.
Виджет формы по умолчанию для этого поля - NumberInput
когда localize
есть False
или
TextInput
нет.
GenericIPAddressField
¶
-
class
GenericIPAddressField
( протокол = 'both' , unpack_ipv4 = False , ** параметры ) ¶
Адрес 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
¶ Распаковывает сопоставленные адреса IPv4, например
::ffff:192.0.2.1
. Если эта опция включена, этот адрес будет распакован192.0.2.1
. По умолчанию отключено. Может использоваться, только если для параметраprotocol
установлено значение'both'
.
Если вы разрешаете пустые значения, вы должны разрешить и пустые значения, поскольку пустые значения сохраняются как пустые.
JSONField
¶
-
класс
JSONField
( кодировщик = Нет , декодер = Нет , ** параметры ) ¶
Поле для хранения данных в кодировке JSON. В Python данные представлены в собственном формате Python: словари, списки, строки, числа, логические значения и
None
.
JSONField
поддерживается в MariaDB 10.2.7+, MySQL 5.7.8+, Oracle, PostgreSQL и SQLite (с включенным расширением JSON1 ).
-
JSONField.
encoder
¶ Необязательный
json.JSONEncoder
подкласс для сериализации типов данных, не поддерживаемых стандартным сериализатором JSON (например,datetime.datetime
илиUUID
). Например, вы можете использоватьDjangoJSONEncoder
класс.По умолчанию
json.JSONEncoder
.
-
JSONField.
decoder
¶ Необязательный
json.JSONDecoder
подкласс для десериализации значения, полученного из базы данных. Значение будет в формате, выбранном пользовательским кодировщиком (чаще всего в виде строки). При десериализации может потребоваться учет того факта, что вы не можете быть уверены в типе ввода. Например, вы рискуете вернуть a,datetime
который на самом деле был строкой, которая случайно оказалась в том же формате, который был выбран дляdatetime
s.По умолчанию
json.JSONDecoder
.
Если вы задаете полю a default
, убедитесь, что это неизменяемый объект, такой как a str
, или вызываемый объект, который каждый раз возвращает новый изменяемый объект, такой как dict
или функция. Предоставление изменяемого объекта по умолчанию, такого как один объект default={}
или default=[]
разделяет его между всеми экземплярами модели.
Чтобы выполнить запрос JSONField
в базе данных, см. Запрос JSONField .
Индексирование
Index
и Field.db_index
оба создают индекс B-дерева, который не особенно полезен при запросах JSONField
. Только на PostgreSQL вы можете использовать
GinIndex
то, что лучше подходит.
Пользователи PostgreSQL
PostgreSQL имеет два собственных типа данных на основе JSON: json
и jsonb
. Основное различие между ними заключается в том, как они хранятся и как их можно запрашивать. json
Поле PostgreSQL хранится как исходное строковое представление JSON и должно декодироваться на лету при запросе на основе ключей. jsonb
Поле хранится на основе фактической структуры JSON , которая позволяет индексировать. Компромисс - небольшая дополнительная плата за запись в jsonb
поле. JSONField
использует jsonb
.
NullBooleanField
¶
-
класс
NullBooleanField
( ** варианты ) ¶
Вроде BooleanField
с null=True
.
Не рекомендуется, начиная с версии 3.1: NullBooleanField
устарел в пользу BooleanField(null=True)
.
PositiveBigIntegerField
¶
-
класс
PositiveBigIntegerField
( ** варианты ) ¶
Подобно a PositiveIntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от 0
до 9223372036854775807
безопасны во всех базах данных, поддерживаемых Django.
PositiveIntegerField
¶
-
класс
PositiveIntegerField
( ** варианты ) ¶
Подобно IntegerField
, но должно быть либо положительным, либо нулевым ( 0
). Значения от 0
до 2147483647
безопасны во всех базах данных, поддерживаемых Django. Значение 0
принято из соображений обратной совместимости.
PositiveSmallIntegerField
¶
-
класс
PositiveSmallIntegerField
( ** варианты ) ¶
Подобно a PositiveIntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от 0
до 32767
безопасны во всех базах данных, поддерживаемых Django.
SlugField
¶
-
class
SlugField
( max_length = 50 , ** варианты ) ¶
Слизняк - это газетный термин. Слаг - это короткая метка для чего-либо, содержащая только буквы, цифры, подчеркивания или дефисы. Обычно они используются в 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
, поле принимает буквы Юникода в дополнение к буквам ASCII. По умолчаниюFalse
.
SmallAutoField
¶
-
класс
SmallAutoField
( ** варианты ) ¶
Подобно AutoField
, но допускает значения только в пределах определенного (зависящего от базы данных) предела. Значения от 1
до 32767
безопасны во всех базах данных, поддерживаемых Django.
SmallIntegerField
¶
-
класс
SmallIntegerField
( ** варианты ) ¶
Как IntegerField
, но допускает значения только в определенной (зависящей от базы данных) точке. Значения от -32768
до 32767
безопасны во всех базах данных, поддерживаемых Django.
TextField
¶
-
класс
TextField
( ** варианты ) ¶
Большое текстовое поле. Виджет формы по умолчанию для этого поля -
Textarea
.
Если вы укажете max_length
атрибут, он будет отражен в
Textarea
виджете автоматически созданного поля формы. Однако это не применяется на уровне модели или базы данных. Используйте
CharField
для этого.
-
TextField.
db_collation
¶ - Новое в Django 3.2.
Имя поля сортировки базы данных.
Примечание
Имена параметров сортировки не стандартизированы. Таким образом, это не будет переносимым между несколькими бэкэндами базы данных.
Oracle
Oracle не поддерживает параметры сортировки для файла
TextField
.
TimeField
¶
-
class
TimeField
( auto_now = False , auto_now_add = False , ** параметры ) ¶
Время, представленное в Python datetime.time
экземпляром. Принимает те же параметры автозаполнения, что и DateField
.
Виджет формы по умолчанию для этого поля - TimeInput
. Администратор добавляет несколько ярлыков JavaScript.
URLField
¶
-
class
URLField
( max_length = 200 , ** варианты ) ¶
A CharField
для URL, подтвержденного
URLValidator
.
Виджет формы по умолчанию для этого поля - URLInput
.
Как и все CharField
подклассы, URLField
принимает необязательный
max_length
аргумент. Если вы не укажете
max_length
, используется значение по умолчанию 200.
UUIDField
¶
-
класс
UUIDField
( ** варианты ) ¶
Поле для хранения универсальных уникальных идентификаторов. Использует UUID
класс Python
. При использовании в PostgreSQL хранится в
uuid
типе данных, в противном случае - в файле char(32)
.
Универсальные уникальные идентификаторы - хорошая альтернатива AutoField
for
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 типа типа данных.
Справочник по Field API ¶
-
класс
Field
¶ Field
- абстрактный класс, представляющий столбец таблицы базы данных. Django использует поля для создания таблицы базы данных (db_type()
), для сопоставления типов Python с базой данных (get_prep_value()
) и наоборот (from_db_value()
).Таким образом, поле является фундаментальной частью различных API-интерфейсов Django, в частности,
models
иquerysets
.В моделях поле создается как атрибут класса и представляет определенный столбец таблицы, см. Модели . У него есть такие атрибуты, как
null
иunique
, и методы, которые Django использует для сопоставления значения поля со значениями, специфичными для базы данных.A
Field
является подклассомRegisterLookupMixin
и, следовательно, обоих,Transform
иLookup
может быть зарегистрирован на нем для использования вQuerySet
s (напримерfield_name__exact="foo"
). Все встроенные поисковые запросы регистрируются по умолчанию.Все встроенные поля Django, такие как
CharField
, являются частными реализациямиField
. Если вам нужно настраиваемое поле, вы можете создать подкласс любого из встроенных полей или написатьField
с нуля. В любом случае см. Написание настраиваемых полей модели .-
description
¶ Подробное описание поля, например, для
django.contrib.admindocs
приложения.Описание может иметь вид:
description = _("String (up to %(max_length)s)")
где аргументы интерполируются из полей
__dict__
.
-
descriptor_class
¶ Класс, реализующий протокол дескриптора, который создается и назначается атрибуту экземпляра модели. Конструктор должен принимать единственный аргумент -
Field
экземпляр. Переопределение этого атрибута класса позволяет настроить поведение получения и установки.
Чтобы сопоставить a
Field
с типом, зависящим от базы данных, Django предоставляет несколько методов:-
get_internal_type
() ¶ Возвращает строку с именем этого поля для конкретных целей серверной части. По умолчанию он возвращает имя класса.
См. Раздел Эмуляция встроенных типов полей для использования в настраиваемых полях.
-
db_type
( подключение ) ¶ Возвращает тип данных столбца базы данных для
Field
, принимая во вниманиеconnection
.См. Раздел Пользовательские типы баз данных для использования в настраиваемых полях.
-
rel_db_type
( подключение ) ¶ Возвращает тип данных столбца базы данных для таких полей, как
ForeignKey
и,OneToOneField
которые указывают наField
, с учетомconnection
.См. Раздел Пользовательские типы баз данных для использования в настраиваемых полях.
Существует три основных ситуации, когда Django необходимо взаимодействовать с серверной частью и полями базы данных:
- когда он запрашивает базу данных (значение Python -> значение серверной части базы данных)
- когда он загружает данные из базы данных (значение серверной части базы данных -> значение Python)
- при сохранении в базу данных (значение Python -> значение серверной части базы данных)
При запросе
get_db_prep_value()
иget_prep_value()
используются:-
get_prep_value
( значение ) ¶ value
- текущее значение атрибута модели, и метод должен возвращать данные в формате, подготовленном для использования в качестве параметра в запросе.См. Раздел Преобразование объектов Python в значения запроса для использования.
-
get_db_prep_value
( значение , соединение , подготовлено = Ложь ) ¶ Преобразуется
value
в значение, зависящее от серверной части. По умолчанию возвращается,value
еслиprepared=True
иget_prep_value()
если естьFalse
.См. Раздел Преобразование значений запроса в значения базы данных для использования.
При загрузке данных
from_db_value()
используются:-
from_db_value
( значение , выражение , связь ) ¶ Преобразует значение, возвращаемое базой данных, в объект Python. Это наоборот
get_prep_value()
.Этот метод не используется для большинства встроенных полей, поскольку серверная часть базы данных уже возвращает правильный тип Python или сама серверная часть выполняет преобразование.
expression
то же самое, что иself
.См. Раздел « Преобразование значений в объекты Python» .
Примечание
По соображениям
from_db_value
производительности не реализован как запрет на работу с полями, которые не требуют этого (все поля Django). Следовательно, вы не можете использоватьsuper
свое определение.
При сохранении
pre_save()
иget_db_prep_save()
используются:-
get_db_prep_save
( значение , связь ) ¶ То же, что и
get_db_prep_value()
, но вызывается, когда значение поля необходимо сохранить в базе данных. По умолчанию возвращаетсяget_db_prep_value()
.
-
pre_save
( model_instance , добавить ) ¶ Метод, вызываемый до того, как
get_db_prep_save()
подготовить значение перед сохранением (например, дляDateField.auto_now
).model_instance
- этоadd
экземпляр, которому принадлежит это поле, и то, сохраняется ли экземпляр в базе данных в первый раз.Он должен вернуть значение соответствующего атрибута из
model_instance
этого поля. Имя атрибута находится вself.attname
(настраиваетсяField
).См. Раздел « Предварительная обработка значений перед сохранением для использования».
Поля часто получают свои значения в виде другого типа либо в результате сериализации, либо из форм.
-
to_python
( значение ) ¶ Преобразует значение в правильный объект Python. Он действует как противоположность
value_to_string()
, а также вызываетсяclean()
.См. Раздел « Преобразование значений в объекты Python» .
Помимо сохранения в базе данных, поле также должно знать, как сериализовать свое значение:
-
value_from_object
( объект ) ¶ Возвращает значение поля для данного экземпляра модели.
Этот метод часто используется
value_to_string()
.
-
value_to_string
( объект ) ¶ Преобразует
obj
в строку. Используется для сериализации значения поля.См. Раздел Преобразование данных поля для сериализации для использования.
При использовании , по потребности , чтобы знать , какие поля формы оно должно быть представлено:
model forms
Field
-
formfield
( form_class = Нет , choices_form_class = Нет , ** 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, чтобы перенести данные с помощью Migrations .
-
Ссылка на атрибут поля ¶
Каждый Field
экземпляр содержит несколько атрибутов, позволяющих проанализировать его поведение. Используйте эти атрибуты вместо isinstance
проверок, когда вам нужно написать код, зависящий от функциональности поля. Эти атрибуты можно использовать вместе с API Model._meta для сужения поиска определенных типов полей. Эти флаги должны быть реализованы в пользовательских полях модели.
Атрибуты для полей ¶
-
Field.
auto_created
¶ Логический флаг, указывающий, было ли поле создано автоматически, например,
OneToOneField
используемое при наследовании модели.
-
Field.
concrete
¶ Логический флаг, который указывает, связан ли с полем столбец базы данных.
Boolean Флаг, указывающий , если поле используется для резервного другой функциональности , не скрытые поля в (например,
content_type
иobject_id
поля , которые составляютGenericForeignKey
).hidden
Флаг используется , чтобы различать , что именно представляет собой общественное подмножество полей на модели со всех полей на модели.Примечание
Options.get_fields()
по умолчанию исключает скрытые поля. Передайте,include_hidden=True
чтобы вернуть скрытые поля в результатах.
-
Field.
is_relation
¶ Boolean Флаг, указывающий , если поле содержит ссылки на один или несколько других моделей для его функциональности (например
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
указывающий, что поле имеет отношение «многие к одному», например aForeignKey
;False
иначе.
-
Field.
one_to_many
¶ Логический флаг,
True
указывающий, что поле имеет отношение «один ко многим», например aGenericRelation
или обратное aForeignKey
;False
иначе.
-
Field.
one_to_one
¶ Логический флаг,
True
указывающий, что поле имеет отношение «один к одному», например aOneToOneField
;False
иначе.
Указывает на модель, к которой относится поле. Например,
Author
в . Для всегда .ForeignKey(Author, on_delete=models.CASCADE)
related_model
GenericForeignKey
None