Примеси для работы с одиночным объектом(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

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

This attribute can help mitigate insecure direct object reference attacks. When applications allow access to individual objects by a sequential primary key, an attacker could brute-force guess all URLs; thereby obtaining a list of all objects in the application. If users with access to individual objects should be prevented from obtaining this list, setting query_pk_and_slug to True will help prevent the guessing of URLs as each URL will require two correct, non-sequential arguments. Using a unique slug may serve the same purpose, but this scheme allows you to have non-unique slugs.

get_object(queryset=None)

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

Если 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()

Returns the name of a slug field to be used to look up by slug. By default this returns the value of 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