django related name что это

What is related_name used for?

6 Answers 6

The related_name attribute specifies the name of the reverse relation from the User model back to your model.

So when you will have to access this data you only can use related name

It is not working otherwise (at least I was not able to skip the usage of related name in case of 2 FK’s to the same table.)

The related_name argument is also useful if you have more complex related class names. For example, if you have a foreign key relationship:

The essentials of your question are as follows.

Since you have Map and User models and you have defined ManyToManyField in Map model, if you want to get access to members of the Map then you have the option of map_instance.members.all() since you have defined members field. However, say you want to access all maps a user is a part of then what option do you have.

By default, Django provided you with user_instance.modelname_set.all() and this will translate to the user.map_set.all() in this case.

maps is much better than map_set.

related_name provides you an ability to let Django know how you are going to access Map from User model or in general how you can access reverse models which is the whole point in creating ManyToMany fields and using ORM in that sense.

Источник

Документация Django 1.6

Этот раздел содержит все существующие подробности о всех параметрах поля и типах полей в Django.

Если существующие поля не предоставляют необходимого функционала, вы можете поискать в localflavor, который содержит дополнительный функционал полезный для различных стран. Также вы можете легко создать собственное поле для модели.

Параметры поля¶

Приведенные аргументы доступны для всех полей. Все они не обязательны.

При использовании Oracle, NULL будет использоваться для пустой строки независимо от значения этого параметра.

blank ¶

choices ¶

Первый элемент – это значение, которое будет сохранено в базе данных. Второй элемент – название, которое будет отображаться для пользователей. Например:

Значения лучше указать в константах внутри модели:

Можно указать список значений и не в модели, но так все данные будут связаны с моделью, и к значениям можно легко обратиться (например, Student.SOPHOMORE можно использовать импортировав модель Student ).

Вы можете сгруппировать значения в именованные группы:

Первый элемент каждого кортежа – это название группы. Второй элемент – итератор с двух-элементными кортежами содержащими значение и отображаемое название. Сгруппированные опции могут комбинироваться с не сгруппированными (как unknown в примере выше).

db_column ¶

Имя колонки в базе данных для хранения данных этого поля. Если этот параметр не указан, Django будет использовать название поля.

Если имя колонки это зарезервированное SQL слово, или содержит символы запрещенные в названиях переменной в Python – в частности, дефис – все нормально. Django автоматически экранирует название колонок и таблиц.

db_index ¶

db_tablespace ¶

default ¶

Значение по умолчанию для поля. Это может быть значение или вызываемый(callable) объект. Если это вызываемый объект, он будет вызван при создании нового объекта.

Значение по умолчанию не может быть изменяемым значением (экземпляр модели, список и т.д.), т.к. все объекты модели будут ссылаться на этот объект. Вместо этого укажите функцию, которая возвращает нужное значение. Например, если у вас есть собственное поле JSONField и вы хотите указать словарь как значение по умолчанию, используйте lambda следующим образом:

editable ¶

error_messages ¶

error_messages позволяет переопределить сообщения ошибок возвращаемых полем. Используйте словарь с ключами соответствующими необходимым ошибкам.

help_text ¶

Подсказка, отображаемая под полем в интерфейсе администратора. Это полезно для описания поля, даже если модель не используется в форме.

primary_key ¶

При True это поле будет первичным ключом.

unique ¶

При True значение поля должно быть уникальным.

unique_for_date ¶

unique_for_month ¶

unique_for_year ¶

verbose_name ¶

Отображаемое имя поля. Если параметр не указан, Django самостоятельно создаст его используя имя атрибута поля, заменяя нижнее подчеркивание на пробелы. Смотрите раздел про отображаемые имена полей.

validators ¶

Список проверок(“валидаторов”) выполняемых для этого поля. Смотрите раздел о “валидаторах” для подробной информации.

Типы полей¶

AutoField ¶

BigIntegerField ¶

BinaryField ¶

BooleanField ¶

Поле хранящее значение true/false.

CharField ¶

Строковое поле для хранения коротких или длинных строк.

Максимальная длинна(в символах) этого поля. max_length используется для проверки данных на уровне базы данных и форм Django.

Если вы создаете независимое приложение, которое должно работать на различных базах данных, помните что существуют некоторые ограничения использования max_length для некоторых типов баз данных. Смотрите раздел про использование различных типов баз данных.

Если вы используете это поле с MySQLdb 1.2.2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.

CommaSeparatedIntegerField ¶

DateField ¶

Дата, представленная в виде объекта datetime.date Python. Принимает несколько дополнительных параметров:

Значение поля будет автоматически установлено в текущую дату при каждом сохранении объекта. Полезно для хранения времени последнего изменения. Заметим, что текущее время будет использовано всегда; это не просто значение по умолчанию, которое вы можете переопределить.

Значение поля будет автоматически установлено в текущую дату при создании(первом сохранении) объекта. Полезно для хранения времени создания. Заметим, что текущее время будет использовано всегда; это не просто значение по-умолчанию, которое вы можете переопределить.

В форме поле будет представлено как :class:`

DateTimeField ¶

DecimalField ¶

Количество знаков после запятой.

Например, для хранения числа до 999 с двумя знаками после запятой, используйте:

Для хранения числа до миллиарда и 10 знаков после запятой:

EmailField ¶

Incompliance to RFCs

Значение max_length в 75 символов не достаточно для хранения всех возможных значений в соответствии RFC3696/5321. Для хранения всех возможных вариантов необходимо значение max_length в 254. Значение в 75 символов сложилось исторически и не изменяется для обратной совместимости.

FileField ¶

Поле для загрузки файла.

primary_key и unique не принимаются, и вызовут исключение TypeError при использовании.

Принимает один обязательный параметр:

Также принимается вызываемый объект, такой как функция, который будет вызван для получения пути к загруженному файлу, включая имя файла. Вызываемый объект должен принимать два обязательных аргумента, и возвращать путь в стиле Unix (с прямыми слэшами), который будет передан в систему хранения файлов(storage). Два аргумента это:

Оригинальное имя файла. Вы можете его учитывать, или проигнорировать, при определении окончательного пути к файлу.

Также принимается один дополнительный параметр:

Необязателен. Объект “storage”, который отвечает за хранение и получение файлов. Смотрите Управление файлами для подробной информации.

Процесс сохранения файла часть процесса сохранения объекта, таким образом имя файла сохраненного на диске не будет доступно, пока объект не будет сохранен.

Заметим, что при загрузке файлов, вы должны обращать внимание куда вы загружаете файлы и какие типы файлов загружаются, чтобы предотвратить возможные уязвимости в защите системы. Проверяйте все загружаемые файлы. Например, если вы разрешите загрузить файл без проверки в каталог, которая обрабатывается сервером, кто-нибудь сможет загрузить CGI или PHP скрипт и выполнить его посетив его URL на вашем сайте. Не допускайте это.

Читайте также:  проектируемый проезд какой район

Также заметим что это относится и к HTML файлам, так как они могу быть выполнены в браузере(хоть и не на сервере), и нести угрозу XSS или CSRF атаки.

FileField и FieldFile¶

Работает так же как и метод file.close() в Python и закрывает файл связанный с объектом.

Или же создать из строки с содержимым файла:

Обратите внимание, когда объект модели удаляется, связанные файлы не удаляются. Если вам необходимо удалять их, делайте это самостоятельно (например, используя команду запущенную через cron).

FilePathField ¶

Конечно же можно использовать все три аргумента вместе.

FloatField ¶

FloatField vs. DecimalField

ImageField ¶

Имя поля, которому автоматически будет присвоено значение высоты изображения при каждом сохранении объекта.

Имя поля, которому автоматически будет присвоено значение ширины изображения при каждом сохранении объекта.

IntegerField ¶

IPAddressField ¶

GenericIPAddressField ¶

NullBooleanField ¶

PositiveIntegerField ¶

PositiveSmallIntegerField ¶

SlugField ¶

Slug – газетный термин. “Slug” – это короткое название-метка, которое содержит только буквы, числа, нижнее подчеркивание или дефис. В основном используются в URL.

SmallIntegerField ¶

TextField ¶

Если вы используете это поле с MySQLdb 1.2.1p2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.

TimeField ¶

URLField ¶

The current value of the field will be displayed as a clickable link above the input widget.

Поля отношений¶

Django предоставляет набор полей для определения связей между моделями.

ForeignKey ¶

Связь многое-к-одному. Принимает позиционный аргумент: класс связанной модели.

Если вам необходимо добавить связь на модель, которая еще не определена, вы можете использовать имя модели вместо класса:

Такой способ позволяет создать циклическую зависимость между моделями из разных приложений.

Представление в базе данных¶

Параметры¶

Словарь параметров для фильтрации (смотрите Выполнение запросов), которые ограничивают множество связанных объектов, отображаемых в поле формы. Используйте функции модуля Python datetime чтобы ограничить множество по дате. Например:

позволяет выбирать связанные объекты с pub_date до текущей даты.

Поле связанной модели, которое используется для создания связи между таблицами. По-умолчанию, Django использует первичный ключ.

Указывает создавать ли “constraint” для внешнего ключа в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:

Вам досталась в наследство нецелостная база данных

Вы используете шардинг базы данных.

Каскадное удаление, значение по умолчанию.

Препятствует удалению связанного объекта вызывая исключение django.db.models.ProtectedError`(подкласс :exc:`django.db.IntegrityError ).

ManyToManyField ¶

Представление в базе данных¶

Параметры¶

Если у вас несколько ManyToManyField указывающих на одну модель и хотите избежать создания обратных связей, укажите в related_name уникальное значение с ‘+’ в конце:

Используется только при рекурсивной связи. Например, есть модель:

Имя промежуточной таблицы для хранения связей многое-ко-многим. Если не указан, Django самостоятельно создаст название по умолчанию используя название таблицы определяющей связь и название поля.

Указывает создавать ли “constraint” для внешних ключей в промежуточной таблице в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:

Вам досталась в наследство нецелостная база данных

Вы используете шардинг базы данных.

Нельзя указать db_constraint и through одновременно.

OneToOneField ¶

В основном применяется как первичный ключ модели, которая “расширяет” другую модель. Например, Multi-table наследование работает через неявное добавление связи один-к-одному от дочерней модели к родительской.

модель User будет содержать следующие атрибуты:

При True и связанной модели, которая наследуется от другой модели, определяет, что должна сохраняться связь на родительскую модель, а не поле OneToOneField дочерней модели, которое используется для организации наследования моделей.

Смотрите примеров использования OneToOneField в Связь один к одному.

Источник

Документация Django 1.9

Этот раздел содержит все существующие подробности о всех параметрах поля и типах полей в Django.

Если существующие поля не предоставляют необходимого функционала, вы можете поискать в django-localflavor, который содержит дополнительный функционал полезный для различных стран.

Параметры поля¶

Приведенные аргументы доступны для всех полей. Все они не обязательны.

Для всех типов полей, вы также должны указать blank=True если вы хотите разрешить пустые значения в формах, т.к. параметр null влияет только на сохранение в базе данных (смотрите blank ).

При использовании Oracle, NULL будет использоваться для пустой строки независимо от значения этого параметра.

blank ¶

choices ¶

Первый элемент каждого кортежа – это значение, которое будет сохранено в базе данных. Второй элемент – название, которое будет отображаться для пользователей. Например:

Значения лучше указать в константах внутри модели:

Можно указать список значений и не в модели, но так все данные будут связаны с моделью, и к значениям можно легко обратиться (например, Student.SOPHOMORE можно использовать импортировав модель Student ).

Вы можете сгруппировать значения в именованные группы:

Первый элемент каждого кортежа – это название группы. Второй элемент – итератор с двух-элементными кортежами содержащими значение и отображаемое название. Сгруппированные опции могут комбинироваться с не сгруппированными (как unknown в примере выше).

db_column ¶

Имя колонки в базе данных для хранения данных этого поля. Если этот параметр не указан, Django будет использовать название поля.

Если имя колонки это зарезервированное SQL слово, или содержит символы запрещенные в названиях переменной в Python – в частности, дефис – все нормально. Django автоматически экранирует название колонок и таблиц.

db_index ¶

При True для поля будет создан индекс в базе данных.

db_tablespace ¶

Имя “tablespace” базы данных используемое для индекса поля, если поле имеет индекс. По-умолчанию используется значение настройки DEFAULT_INDEX_TABLESPACE проекта, если оно указано, иначе db_tablespace модели. Если база данных не поддерживает “tablespace” для индексов, этот параметр будет проигнорирован.

default ¶

Значение по умолчанию для поля. Это может быть значение или вызываемый(callable) объект. Если это вызываемый объект, он будет вызван при создании нового объекта.

Значение по умолчанию не может быть изменяемым значением (экземпляр модели, список, множество и т.д.), т.к. все объекты модели будут ссылаться на этот объект и использовать его как значение по умолчанию. Вместо этого укажите функцию, которая возвращает нужное значение. Например, если у вас есть собственное поле JSONField и вы хотите указать словарь как значение по умолчанию, используйте следующую функцию:

editable ¶

error_messages ¶

error_messages позволяет переопределить сообщения ошибок возвращаемых полем. Используйте словарь с ключами соответствующими необходимым ошибкам.

Читайте также:  checking nvram что это такое

help_text ¶

Подсказка, отображаемая под полем в интерфейсе администратора. Это полезно для описания поля, даже если модель не используется в форме.

Заметим, что, при отображении в форме, HTML-символы не экранируются. Это позволяет использовать HTML в help_text если вам необходимо. Например:

primary_key ¶

При True это поле будет первичным ключом.

Первичный ключ доступен только для чтения. Если вы поменяете значение для существующего объекта и сохраните его, будет создан новый объект.

unique ¶

При True значение поля должно быть уникальным.

unique_for_date ¶

Этот параметр должен быть равен названию DateField или DateTimeField поля, для которого значение должно быть уникальным.

Проверка выполняется методом Model.validate_unique() во время валидации модели, не на уровне базы данных. Если unique_for_date содержит поля, которые не входят в ModelForm (например, поле было указанно в exclude или содержит editable=False ), Model.validate_unique() не будет выполнять эту валидацию.

unique_for_month ¶

unique_for_year ¶

verbose_name ¶

validators ¶

Список проверок(“валидаторов”) выполняемых для этого поля. Смотрите раздел о “валидаторах” для подробной информации.

Регистрация и загрузка операторов для фильтрации¶

Типы полей¶

AutoField ¶

BigIntegerField ¶

BinaryField ¶

BooleanField ¶

Поле хранящее значение true/false.

CharField ¶

Строковое поле для хранения коротких или длинных строк.

CharField принимает один дополнительный аргумент:

Максимальная длинна(в символах) этого поля. max_length используется для проверки данных на уровне базы данных и форм Django.

Если вы создаете независимое приложение, которое должно работать на различных базах данных, помните что существуют некоторые ограничения использования max_length для некоторых типов баз данных. Смотрите раздел про использование различных типов баз данных.

Если вы используете это поле с MySQLdb 1.2.2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.

CommaSeparatedIntegerField ¶

DateField ¶

Дата, представленная в виде объекта datetime.date Python. Принимает несколько дополнительных параметров:

Значение поля будет автоматически установлено в текущую дату при каждом сохранении объекта. Полезно для хранения времени последнего изменения. Заметим, что текущее время будет использовано всегда; это не просто значение по умолчанию, которое вы можете переопределить.

Значение поля будет автоматически установлено в текущую дату при создании(первом сохранении) объекта. Полезно для хранения времени создания. Заметим, что текущее время будет использовано всегда; это не просто значение по-умолчанию, которое вы можете переопределить. По этому, даже если вы укажите значение для этого поля, оно будет проигнорировано. Если вы хотите изменять значения этого поля, используйте следующее вместо auto_now_add=True :

В форме поле будет представлено как :class:`

DateTimeField ¶

DecimalField ¶

Десятичное число с фиксированной точностью, представленное объектом Decimal Python. Принимает два обязательных параметра:

Количество знаков после запятой.

Например, для хранения числа до 999 с двумя знаками после запятой, используйте:

Для хранения числа до миллиарда и 10 знаков после запятой:

DurationField ¶

Арифметика над DurationField работает в большинстве случаев. Однако, для всех баз данных, кроме PostgreSQL, арифметическое сравнение DurationField и DateTimeField работает не как ожидается.

EmailField ¶

Поле CharField для хранения правильного email-адреса. Использует EmailValidator для проверки значения.

Значение max_length по умолчанию было увеличено с 75 до 254 для совместимости с RFC3696/5321.

FileField ¶

Поле для загрузки файла.

primary_key и unique не принимаются, и вызовут исключение TypeError при использовании.

Также принимается два дополнительных параметра:

upload_to также принимается вызываемый объект, такой как функция, который будет вызван для получения пути к загруженному файлу, включая имя файла. Вызываемый объект должен принимать два обязательных аргумента, и возвращать путь в стиле Unix (с прямыми слэшами), который будет передан в систему хранения файлов(storage). Два аргумента это:

Оригинальное имя файла. Вы можете его учитывать, или проигнорировать при определении окончательного пути к файлу.

Объект “storage”, который отвечает за хранение и получение файлов. Смотрите Управление файлами для подробной информации.

Использование FileField или ImageField (смотрите ниже) требует некоторых дополнительных действий:

Если вам нужны название файла или его размер, используйте атрибуты name и size соответственно; больше информации о доступных методах и атрибутах вы найдете в справке о File и разделе документации Управление файлами.

Процесс сохранения файла – часть процесса сохранения объекта, таким образом имя файла, сохраненного на диске, не будет доступно, пока объект не будет сохранен.

Заметим, что при загрузке файлов, вы должны обращать внимание, куда вы загружаете файлы и какие типы файлов загружаются, чтобы предотвратить возможные уязвимости в защите системы. Проверяйте все загружаемые файлы. Например, если вы разрешите загрузить файл без проверки в каталог, который обрабатывается сервером, кто-нибудь сможет загрузить CGI или PHP скрипт и выполнить его, посетив его URL на вашем сайте. Не допускайте это.

Также заметим что это относится и к HTML файлам, так как они могу быть выполнены в браузере(хоть и не на сервере), и нести угрозу XSS или CSRF атаки.

FileField и FieldFile¶

При доступе к FileField модели, вы получаете экземпляр FieldFile как “proxy” для работы с файлом. Этот класс содержит несколько дополнительных атрибутов и методов для работы с файлом, кроме унаследованных от django.core.files.File :

FieldFile. open (mode=’rb’

Работает так же как и метод file.close() в Python и закрывает файл связанный с объектом.

Этот метод принимает имя файла и содержимое и передает его в экземпляр класса “storage” этого поля, потом добавляет файл в модель. Если вы хотите самостоятельно добавить содержимое файла в поле FileField вашей модели, метод save() то, что вам нужно.

Или же создать из строки с содержимым файла:

FieldFile. delete (save=True

Обратите внимание, когда объект модели удаляется, связанные файлы не удаляются. Если вам необходимо удалять их, делайте это самостоятельно (например, используя команду, запущенную через cron).

FilePathField ¶

Поле CharField значение которого ограничено именем файла из определенного каталога. Принимает три дополнительных аргумента, первый из них обязателен:

Конечно же можно использовать все аргумента вместе.

Следует помнить, что match применяется к имени файла, а не абсолютному пути. Таким образом:

FloatField ¶

FloatField или DecimalField

ImageField ¶

Для определения этих аргументов ImageField принимает дополнительные аргументы:

Имя поля, которому автоматически будет присвоено значение высоты изображения при каждом сохранении объекта.

Имя поля, которому автоматически будет присвоено значение ширины изображения при каждом сохранении объекта.

IntegerField ¶

GenericIPAddressField ¶

NullBooleanField ¶

PositiveIntegerField ¶

PositiveSmallIntegerField ¶

SlugField ¶

Slug – газетный термин. “Slug” – это короткое название-метка, которое содержит только буквы, числа, подчеркивание или дефис. В основном используются в URL.

SmallIntegerField ¶

TextField ¶

Если вы используете это поле с MySQLdb 1.2.1p2 и utf8_bin “collation” (которое не является значением по умолчанию), могут быть некоторые проблемы. Смотрите советы при работе с MySQL для подробностей.

Читайте также:  с каким вином есть суши

TimeField ¶

URLField ¶

UUIDField ¶

Поля отношений¶

Django предоставляет набор полей для определения связей между моделями.

ForeignKey ¶

Связь многое-к-одному. Принимает позиционный аргумент: класс связанной модели.

on_delete может теперь использоваться как второй позиционный аргумент (ранее использовался только как именованный аргумент). Будет обязательным аргументом в Django 2.0.

Если вам необходимо добавить связь на модель, которая еще не определена, вы можете использовать имя модели вместо класса:

Такой способ позволяет создать циклическую зависимость между моделями из разных приложений.

Представление в базе данных¶

Параметры¶

ForeignKey принимает дополнительные аргументы, которые определяют, как должна работать связь.

Возможные значения для on_delete находятся в django.db.models :

Каскадное удаление. Django эмулирует поведение SQL правила ON DELETE CASCADE и так же удаляет объекты, связанные через ForeignKey.

Препятствует удалению связанного объекта вызывая исключение django.db.models.ProtectedError`(подкласс :exc:`django.db.IntegrityError ).

Указание функции может быть полезно, если используется объект Python datetime для фильтрации. Например:

Поле связанной модели, которое используется для создания связи между таблицами. По-умолчанию, Django использует первичный ключ.

Указывает создавать ли “constraint” для внешнего ключа в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:

Вам досталась в наследство нецелостная база данных

Вы используете шардинг базы данных.

ManyToManyField ¶

Представление в базе данных¶

Параметры¶

ManyToManyField принимает дополнительные аргументы – все не обязательны – которые определяют как должна работать связь.

limit_choices_to«не работает для «ManyToManyField переопределенной через through промежуточной моделью.

Используется только при рекурсивной связи. Например, есть модель:

Django автоматически создает промежуточную таблицу для хранения связи. Однако, если вы хотите самостоятельно определить промежуточную таблицу, используйте параметр through указав модель Django, которая будет хранить связь между моделями.

Если вы не указали through модель, вы все равно может обратиться к неявно промежуточной модели, которая была автоматически создана. Она содержит три поля, связывающие модели.

Если связанные модели разные, создаются следующие поля:

id : первичный ключ для связи.

Если ManyToManyField ссылается на одну и ту же модель, будут созданы поля:

id : первичный ключ для связи.

from_ _id : id объекта основной модели (исходный объект).

to_ _id : id объекта, на который указывает связь (целевой объект).

Этот класс может использоваться для получения связей.

Используется, если явно указана промежуточная модель для связи многое-ко-многим. Обычно Django самостоятельно определяется какие поля использовать для создания связи. Однако, возьмем такой пример:

Рекурсивные связи, использующие промежуточную модель, всегда считаются несимметричными – то есть с symmetrical=False – поэтому существуют понятия “источник” и “цель” связи. В этом случае ‘field1’ будет “источником” связи, а ‘field2’ – “целью”.

Имя промежуточной таблицы для хранения связей многое-ко-многим. Если не указан, Django самостоятельно создаст название по умолчанию используя название таблицы определяющей связь и название поля.

Указывает создавать ли “constraint” для внешних ключей в промежуточной таблице в базе данных. По умолчанию True и в большинстве случает это то, что вам нужно. Указав False вы рискуете целостностью данных. Некоторые ситуации, когда вам может быть это необходимо:

Вам досталась в наследство нецелостная база данных

Вы используете шардинг базы данных.

Нельзя указать db_constraint и through одновременно.

null не влияет на работу поля т.к. нет способа сделать связь обязательной на уровне базы данных.

OneToOneField ¶

on_delete может теперь использоваться как второй позиционный аргумент (ранее использовался только как именованный аргумент). Будет обязательным аргументом в Django 2.0.

В основном применяется как первичный ключ модели, которая “расширяет” другую модель. Например, Multi-table наследование работает через неявное добавление связи один-к-одному от дочерней модели к родительской.

модель User будет содержать следующие атрибуты:

При True и связанной модели, которая наследуется от другой модели, определяет, что должна сохраняться связь на родительскую модель, а не поле OneToOneField дочерней модели, которое используется для организации наследования моделей.

Смотрите примеров использования OneToOneField в Связь один к одному.

Справочник по полям модели¶

Field – абстрактный класс, отображающий колонку в таблице в базе данных. Django используется поля для создания таблицы в базе данных ( db_type() ), для преобразования типов Python в типа в базе данных ( get_prep_value() ) и наоборот ( from_db_value() ), и для применения Lookup API reference ( get_prep_lookup() ).

Может использовать форматирование:

Аргументы будут подставляется из значений __dict__ поля.

Для преобразования типа Field в тип базы данных Django используется два метода:

Возвращает текстовое название типа поля для использования в бэкендах баз данных. По умолчанию возвращает название класса.

Существует три основных ситуации, когда Django используется преобразование типа поля:

value – значение атрибута поля модели. Метод должен вернуть значение, которое можно использовать как параметр в запросе.

get_db_prep_value (value, connection, prepared=False

При загрузке данных используется from_db_value() :

from_db_value (value, expression, connection, context

Для большинства встроенных полей этот метод не используется т.к. бэкенд базы данных возвращает уже правильный объект Python, или же бэкенд сам выполняет необходимые преобразования.

При сохранении используются методы pre_save() и get_db_prep_save() :

get_db_prep_save (value, connection

pre_save (model_instance, add

model_instance – объект модели, к которому принадлежит поле, add – указывает сохраняется ли объект первый раз в базу данных.

При использовании фильтрации по полю, может быть необходимо “приготовить” значение. Django используется для этого два метода:

get_prep_lookup (lookup_type, value

get_db_prep_lookup (lookup_type, value, connection, prepared=False

Поля часто принимает значения разных типов из сериализатора, или формы

Кроме сохранения в базу данных, поле также должно знать как сериализовать свое значение:

Преобразует obj в строку. Используется при сериализации значения поля.

При использовании django.forms.ModelForm Field должно указать, какое поле формы необходимо использовать для его представления в форме:

formfield (form_class=None, choices_form_class=None, **kwargs

Возвращает 4-х элементный кортеж с информацией, как воссоздать поле:

Название поля в модели.

Путь для импорта класса поля (например, «django.db.models.IntegerField» ). Должен возвращаться максимально переносимый между платформами и версиями вариант.

Список позиционных аргументов.

Словарь именованных аргументов.

Этот метод должен быть добавлен полям, созданным до 1.7, для использования Миграции.

Атрибуты поля¶

Атрибуты поля¶

Флаг, который указывает было ли поле создано автоматически, например OneToOneField при наследовании моделей.

Флаг, который указывает представлено ли поле колонкой в таблице в базе данных.

Флаг, который указывает, что поле скрыто и используется для работы другого не скрытого поля (например, поля content_type и object_id используются для работы GenericForeignKey ). Флаг hidden используется, чтобы выделить публичные поля модели из всех полей.

Содержит модель, в которой это поле определено. Если поле определено в родительском классе, model будет ссылаться на этот класс, а не класс экземпляра модели.

Атрибуты связывающих полей¶

Атрибуты, определяющие связь поля. Эти атрибуты присутствуют во всех полях, однако, только для связывающих полей( Field.is_relation=True ) они содержат булевы значения(а не None ).

Источник

Сказочный портал