Примеси для работы с одиночным объектом(Single object mixins)

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

Предоставляет механизм для поиска объекта, связанного с текущим запросом HTTP.

Методы и Атрибуты

model

Модель с которой “работает” данное представление(представление будет отображать данные этой модели). Указать model = Foo эквивалентно инструкции queryset = Foo.objects.all(), где objects является менеджером по умолчанию для модели Foo.

queryset

Запрос QuerySet, представляющий объекты. Если указан, то значение queryset замещает значение в model.

Предупреждение

queryset – атрибут класса с изменяемым значением, так что будьте осторожны при его использовании. Используя его, лучше вызывать метод all(), или получить его значение через метод get_queryset(), которые сделает копию атрибута.

slug_field

Имя поля модели, содержащего слаг(slug). По умолчанию, slug_field это 'slug'.

slug_url_kwarg

Имя переданного ключевого аргумента(именованной группы) в URLConf, содержащего значение слага(slug). По умолчанию, slug_url_kwarg это 'slug'.

pk_url_kwarg

Имя переданного ключевого аргумента(именованной группы) в URLConf, содержащего значение первичного ключа(primary key). По умолчанию, pk_url_kwarg равен 'pk'.

context_object_name

Задает имя переменной для использования в текущем контексте.

query_pk_and_slug
Добавлено в Django 1.8.

При True метод get_object() ищет объект по первичному ключу и “слагу”. По умолчанию False.

Этот атрибут может помочь предотвратить атаку на незащищенный ресурс и прямой доступ к объектам. Если приложение предоставляет доступ к объектам через последовательный первичный ключ, атакующий может перебрать URL-ы и получить все объекты в приложении. Если пользователи не должны иметь доступ к списку всех объект, опция query_pk_and_slug позволит предотвратить подбор URL-ов через первичный ключ т.к. каждый URL будет требовать два правильных непоследовательных аргумента. Вы также можете просто использовать уникальный “slug” для этой цели, но эта опция позволит хранить не уникальный “slug”.

get_object(queryset=None)

Возвращает объект, который отображается данным представлением. Если предоставлено значение queryset, то этот queryset будет использован для получения объекта; в противном случае будет использован результат вызова метода get_queryset(). Метод get_object() проверяет значение аргумента pk_url_kwarg, из списка переданных представлению; если этот аргумент найден, то метод выполнит поиск по первичному ключу(по переданному значению). Если этот аргумент не найден, то будет проверено наличие аргумента slug_url_kwarg, и выполнен поиск по значению слага(используя slug_field).

Изменено в Django 1.8:

Если query_pk_and_slug равен True, get_object() будет искать объект по первичному ключу и значению “slug”.

get_queryset()

Возвращает объект queryset, который буден использован для получения объекта для данного представления. По умолчанию, метод get_queryset() возвращает значение атрибута queryset (если он установлен), - в противном случае будет создан экземпляр класса QuerySet вызовом метода all() у атрибута :attr:`model`( с помощью менеджера по умолчанию).

get_context_object_name(obj)

Возвращает имя переменной контекста(context variable), которая будет доступна в шаблоне и будет содержать данные, с которыми работает представление. Если атрибут context_object_name не установлен, то имя переменной контекста будет составлено из model_name модели, “породившей” текущий queryset. Например, модель Article будет иметь переменную контекста с именем 'article'.

get_context_data(**kwargs)

Возвращает данные контекста для отображения списка объектов.

Встроенная реализация этого метода требует чтобы атрибут self.object был установлен в представлении (пускай даже в None). Не забудьте об этом, когда будете использовать этот mixin без одного из встроенных представлений, которое уже делает это.

Возвращает словарь со следующим содержимым:

  • object: Объект, который отображается представлением (self.object).

  • context_object_name: self.object будет сохранен в контексте под именем, которое вернул метод get_context_object_name(). По умолчанию это название модели в нижнем регистре.

Переменные контекста переопределяют значения из контекстных процессоров

Переменные из get_context_data() перезаписывают переменные контекста из процессоров контекста. Например, если ваше представление записывает User в атрибут model, название переменной контекста по умолчанию user перезапишет переменную user и процессора контекста django.contrib.auth.context_processors.auth(). Используйте get_context_object_name(), чтобы избежать конфликтов.

get_slug_field()

Возвращает имя поля, хранящего слаг(slug), которое будет использоваться при выборке данных по слагу. По умолчанию просто возвращает значение атрибута slug_field.

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

Класс-примесь, дающий возможность работы с шаблонами для представлений, отображающих одиночный объект. Требует, чтобы представление, в которое будет добавляться эта примесь, предоставляло значение self.object, - экземпляр объекта с которым “работает” представление. Обычно, хотя это и не требуется, self.object``это экземпляр модели Django.  Это значение может быть ``None, если представление “в середине” процесса по созданию нового экземпляра объекта.

Наследуется от

Методы и Атрибуты

template_name_field

Поле на текущий экземпляр объекта, который может быть использован для определения имени шаблона кандидата(шаблона, который будет использован для отображения данных). Если либо само значение template_name_field или значение template_name_field в текущем экземпляре объекта равно None, то объект не будет использоваться для определения имени шаблона кандидата.

template_name_suffix

Суффикс, который добавляется к автоматически сгенерированным именам шаблонов кандидатов. Значение суффикса по умолчанию: _detail.

get_template_names()

Возвращает список имен шаблонов кандидатов. Возвращает следующий список:

  • значение атрибута template_name в представлении(если указано)

  • содержимое поля template_name_field в экземпляре объекта, с которым работает представление(если доступно)

  • <app_label>/<model_name><template_name_suffix>.html