Миксины одного объекта

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

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

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

model

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

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, содержащего первичный ключ. По умолчанию pk_url_kwarg - 'pk'.

context_object_name

Обозначает имя переменной для использования в контексте.

query_pk_and_slug

Если True, заставляет get_object() выполнять поиск, используя как первичный ключ, так и slug. По умолчанию установлено значение False.

Этот атрибут может помочь смягчить атаки insecure direct object reference. Когда приложения разрешают доступ к отдельным объектам по последовательному первичному ключу, злоумышленник может перебором угадать все URL-адреса, получив таким образом список всех объектов приложения. Если необходимо предотвратить получение этого списка пользователями, имеющими доступ к отдельным объектам, установка query_pk_and_slug на True поможет предотвратить угадывание URL, поскольку каждый URL будет требовать двух правильных, непоследовательных аргументов. Использование уникального slug может служить той же цели, но эта схема позволяет иметь неуникальные slug.

get_object(queryset=None)

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

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

get_queryset()

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

get_context_object_name(obj)

Возвращает имя контекстной переменной, которая будет использоваться для содержания данных, которыми манипулирует это представление. Если context_object_name не задано, имя контекста будет сконструировано из model_name модели, из которой состоит кверисет. Например, модель Article будет иметь объект контекста с именем 'article'.

get_context_data(**kwargs)

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

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

Он возвращает словарь с этим содержимым:

  • object: Объект, который отображает данное представление (self.object).
  • context_object_name: self.object также будет храниться под именем, возвращаемым get_context_object_name(), которое по умолчанию является строчной версией имени модели.

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

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

get_slug_field()

Возвращает имя поля slug, которое будет использоваться для поиска по 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
Вернуться на верх