# dokumentasi Django 2.2.9.dev20191202104323

# Mixin obyek tunggal

## `SingleObjectMixin`

class `django.views.generic.detail.``SingleObjectMixin`

  Menyediakan sebuah mekanisme untuk mencari sebuah obyek terkait dengan permintaan HTTP saat ini.

  Cara dan Atribut

  `model`

    Model yang tampilan ini akan menampilkan data. Menentukan `model = Foo` secara efektif sama seperti menentukan `queryset = Foo.objects.all()`, dimana `objects` berdiri untuk default manager `Foo`.

  `queryset`

    Sebuah `QuerySet` yang mewakili obyek-obyek. Jika disediakan, nilai dari `queryset` menggantikan nilai disediakan untuk `model`.

    Peringatan

    `queryset` adalah sebuah atribut kelas dengan nilai berubah-ubah sehingga perawatan harus diambil ketika menggunakan itu secara langsung. Sebelum menggunakan itu, antara memanggil metode `all()` nya atau mengambil itu dengan `get_queryset()` yang merawat dari kloning dibelakang layar.

  `slug_field`

    Nama dari bidang pada model yang mengandung tanda siput. Secara awalan, `slug_field` adalah `'slug'`.

  `slug_url_kwarg`

    Nama dari argumen kata kunci URLConf yang mengandung tanda siput. Secara awalan, `slug_url_kwarg` adalah `'slug'`.

  `pk_url_kwarg`

    Nama dari argumen kata kunci URLConf yang mengandung primary key. Secara awalan, `pk_url_kwarg` adalah `'pk'`.

  `context_object_name`

    Menandakan nama dari variabel untuk digunakan di konteks.

  `query_pk_and_slug`

    Jika `True`, menyebabkan `get_object()` melakukan pencariannya menggunakan kedua primay key dan tanda siput. Awalan menjadi `False`.

    Atribut ini dapat membantu mengatasi serangan insecure direct object reference. Ketika aplikasi mengizinkan akses ke obyek-obyek pribadi dengan primay key berurutan, seorang penyerang dapat menebak brute-force semua URL; dengan demikian mendapatkan semua daftar dari semua obyek-obyek di aplikasi. Jika pengguna dengan akses ke obyek-obyek pribadi harus dicegah dari mendapatkan daftar ini, pengaturan `query_pk_and_slug` menjadi `True` akan membantu mencegah menebak URL setiap URL akan membutuhkan dua benar, argumen bukan-berurutan. Cukup menggunakan sebuah tanda siput unik mungkin melayani tujuan yang sama, tetapi skema ini mengizinkan anda memiliki tanda siput bukan-unik.

  `get_object`(queryset=None)

    Mengembalikan obyek tunggal yang tampilan ini akan diperlihatkan. Jika `queryset` disediakan, queryset itu akan digunakan sebagai sumber dari obyek-obyek; jika tidak, `get_queryset()` akan digunakan. `get_object()` mencari sebuah argumen `pk_url_kwarg` di argumen pada tampilan; jika argumen ini ditemukan, metode ini melakukan sebuah pencarian berdasarkan primary-key menggunakan nilai itu. Jika argumen ini tidak ditemukan, itu mencari sebuah argumen `slug_url_kwarg`, dan melakukan pencarian tanda siput menggunakan `slug_field`.

    Ketika `query_pk_and_slug` adalah `True`, `get_object()` akan melakukan pencariannya menggunakan kedua primary key dan tanda siput.

  `get_queryset`()

    Mengembalikan queryset yang akan digunakan mengambil obyek yang tampilan ini akan diperlihatkan. Secara awalan, `get_queryset()` mengembalikan nilai dari atribut `queryset` jika itu disetel, jika tidak itu membangun sebuah `QuerySet` dengan memanggil metode `all()` pada pengelola awalan atribut `model`.

  `get_context_object_name`(obj)

    Mengembalikan nama variabel konteks yang akan digunakan mewadahi daftar data yang tampilan ini dimanipulasi. Jika `context_object_name` tidak disetel, nama konteks akan dibangun dari `model_name` dari the model yang queryset disusun dari. Sebagai contoh, model `Article` akan mempunyai sebuah obyek konteks bernama `article`.

  `get_context_data`(**kwargs)

    Mengembalikan data konteks untuk menampilkan obyek.

    Penerapan dasar dari metode ini membutuhkan bahwa atribut `self.object` disetel oleh tampilan (bahkan jika `None`). Pastikan melakukan ini jika anda sedang menggunakan mixin ini tanpa satu dari tampilan siap-pakai yang melakukan begitu.

    Itu mengembalikan sebuah kamus dengan isi ini:

    - `object`: Obyek dimana tampilan ini diperlihatkan (`self.object`).
    - `context_object_name`: `self.object` juga akan disimpan dibawah nama dikembalikan oleh `get_context_object_name()`, yang awalan ke versi huruf kecil dari nama model.

    Variabel konteks menimpa nilai-nilai dari pengolah konteks cetakan

    Tiap variabel dari `get_context_data()` mengambil hak lebih tinggi terhadap variabel konteks dari context processors. Sebagai contoh, jika tampilan anda menyetel atribut `model` pada `User`, awalan nama obyek konteks dari `user` akan menimpa variabel `user` dari pengolah konteks `django.contrib.auth.context_processors.auth()`. Gunakan `get_context_object_name()` untuk menghindari tabrakan.

  `get_slug_field`()

    Mengembalikan nama dari bidang tanda siput untuk digunakan mencari oleh tanda siput. Secara awalan ini cukup mengembalikan nilai dari `slug_field`.

## `SingleObjectTemplateResponseMixin`

class `django.views.generic.detail.``SingleObjectTemplateResponseMixin`

  Sebuah kelas mixin yang melakukan pembangunan tanggapan berdasarkan-cetakan untuk tampilan yang beroperasi diatas instance obyek tunggal. Membutuhkan bahwa tampila itu dicampur dengan menyediakan `self.object`, instance obyek yang tampilan beroperasi. `self.object` akan biasanya, tetapi itu tidak diwajibkan, sebuah instance dari model Django. Itu mungkin `None` jika tampilan di pengolahan dari membangun instance baru.

  Perpanjang

  - `TemplateResponseMixin`

  Cara dan Atribut

  `template_name_field`

    Bidang pada instance obyek saat ini yang dapat digunakan untuk menentukan nama dari calon cetakan. Jika antara `template_name_field` itu sendiri atau nilai dari `template_name_field` pada instance obyek saat ini adalah `None`, obyek tidak akan digunakan untuk calon nama cetakan.

  `template_name_suffix`

    Akhiran ditambahkan ke calon nama cetakan dibangkitkan-otomatis. Awalan akhiran adalah `_detail`.

  `get_template_names`()

    Mengembalikan daftar dari calon nama-nama cetakan. Mengembalikan daftar berikut:

    - nilai dari `template_name` pada tampilan (jika disediakan)
    - isi dari bidang `template_name_field` pada instance obyek yang tampilan sedang beroperasi diatas (jika tersedia)
    - `<app_label>/<model_name><template_name_suffix>.html`