{"title":"Tindakan admin","version":"2.1","locale":"id","docname":"ref/contrib/admin/actions","url":"/id/2.1/ref/contrib/admin/actions/","canonical":"https://djangodocs.dev/id/2.1/ref/contrib/admin/actions/","summary":"Alir kerja dasar dari admin Django adalah, dalam kulit kacang, \"pilih sebuah obyek, kemudian rubah itu.\" Ini bekerja baik untuk kebanyakan penggunaan kasus.…","html":"<h1>Tindakan admin<a class=\"heading-anchor\" href=\"#admin-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Alir kerja dasar dari admin Django adalah, dalam kulit kacang, &quot;pilih sebuah obyek, kemudian rubah itu.&quot; Ini bekerja baik untuk kebanyakan penggunaan kasus. Bagaimanapun, jika anda butuh perubahan sama ke banyak obyek sekali waktu, alir kerja ini bisa sangat membosankan.</p>\n<p>Di kasus-kasus ini, admin Django membiarkan anda menulis dan mendaftar &quot;actions&quot; -- fungsi sederhana yang dipanggil dengan daftar dari obyek-obyek terpilih pada halaman daftar rubah.</p>\n<p>Jika anda mencari daftar perubahan apapun di admin, anda akan melihat fitur ini di tindakan; Django dikirim dengan tindakan &quot;menghapus obyek terpilih&quot; tersedia untuk semua model. Sebagai contoh, ini adalah modul pengguna dari aplikasi <a class=\"reference internal\" href=\"/id/2.1/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a> pasang-tetap Django :</p>\n<img alt=\"/id/2.1/_images/admin-actions.png\" src=\"/id/2.1/_images/admin-actions.png\" />\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Tindakan &quot;hapus obyek-obyek terpilih&quot; menggunakan <a class=\"reference internal\" href=\"/id/2.1/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.delete()</span></code></a> untuk alasan efesiensi, yang mempunyai surat keberatan yang penting: metode <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> model anda tidak akan dipanggil.</p>\n<p>Jika anda berharap menimpa perilaku ini, anda dapat menimpa <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.delete_queryset\" title=\"django.contrib.admin.ModelAdmin.delete_queryset\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.delete_queryset()</span></code></a> atau menulis penyesuaian tindakan yang melakukan penghapusan dalam perilaku anda pilih -- sebagai contoh, dengan memanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.delete()</span></code> untuk setiap dari barang terpilih.</p>\n<p>Untuk latar belakang lebih pada penghapusan jumlah besar, lihat dokumentasi pada <a class=\"reference internal\" href=\"/id/2.1/topics/db/queries/#topics-db-queries-delete\"><span class=\"std std-ref\">object deletion</span></a>.</p>\n</aside>\n<p>Baca untuk menemukan bagaimana menambah tindakan anda sendiri ke daftar ini.</p>\n<section id=\"writing-actions\">\n<h2>Menulis tindakan<a class=\"heading-anchor\" href=\"#writing-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Cara mudah untukmenjelaskan tindakan adalah dengan contoh, jadi mari kita selami.</p>\n<p>Penggunaan kasus umum untuk tindakan admin adalah memperbaharui dalam jumlah besar dari sebuah model. Bayangkan aplikasi berita sederhana dengan model <code class=\"docutils literal notranslate\"><span class=\"pre\">Article</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"n\">STATUS_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Draft&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Published&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Withdrawn&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">STATUS_CHOICES</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n</code></pre></div>\n<p>Tugas utama kami mungkin lakukan dengan sebuah model seperti ini adalah memperbaharui sebuah keadaan article dari &quot;draft&quot; menjadi &quot;published&quot;. Kami dapat dengan mudah melakukan ini di admin satu artikel pada sekali waktu, tetapi jika kami ingin menerbitkan-jumlah besar kelompok dari artikel, itu akan membosankan. Jadi, mari kita menulis sebuah tindakan yang membuat kita merubah sebuah keadaan artikel menjadi &quot;published.&quot;</p>\n<section id=\"writing-action-functions\">\n<h3>Menulis fungsi tindakan<a class=\"heading-anchor\" href=\"#writing-action-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pertama, kami akan butuh menulis sebuah fungsi yang dipanggil ketika tindakan dipicu dari admin. Tindakan berbagi fungsi hanya fungsi biasa yang mengambil tiga argumen:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> saat ini</p></li>\n<li><p>Sebuah <a class=\"reference internal\" href=\"/id/2.1/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> mewakili permintaan saat ini,</p></li>\n<li><p>Sebuah <a class=\"reference internal\" href=\"/id/2.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> mengandung sekumpulan dari obyek-obyek terpilih oleh pengguna.</p></li>\n</ul>\n<p>Fungsi terbitan-artikel-ini kami tidak butuh <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> atau obyek permintaan, tetapi kami akan menggunakan queryset:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Untuk penampilan terbaik, kami sedang menggunakan <a class=\"reference internal\" href=\"/id/2.1/topics/db/queries/#topics-db-queries-update\"><span class=\"std std-ref\">update method</span></a> queryset. Jenis-jenis lain dari tindakan mungkin butuh berurusan dengan setiap obyek pribadi; di kasus-kasus ini kami hanya cukup berulang terhadap queryset:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">:</span>\n    <span class=\"n\">do_something_with</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<p>Itu benar-benar semuanya ada adalah menulis sebuah tindakan! Bagaimanapun, kami akan mengambil satu atau lebih langkah pilihan-tetapi-berguna dan memberikan tindakan sebuah judul &quot;nice&quot; dalam admin. Secara awalan, tindakan ini akan muncul dalam daftar tindakan sebagai &quot;Make published&quot; -- nama fungsi, dengan garis bawah diganti oleh ruang. Tidak apa-apa, tetai kami dapat menyediakan lebih baik, nama lebih ramah-manusia dengan memberikan fungsi make_published` sebuah atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">short_description</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">make_published</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Mark selected stories as published&quot;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Ini mungkin terlihat akrab; pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> admin menggunakan teknik sama untuk menyediakan gambaran dapat dibaca-manusia untuk fungsi callback terdaftar disana, juga.</p>\n</aside>\n</section>\n<section id=\"adding-actions-to-the-modeladmin\">\n<h3>Menambahkan tindakan pada <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a><a class=\"heading-anchor\" href=\"#adding-actions-to-the-modeladmin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Selanjutnya, kami akan butuh menginformasikan <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> kami dari tindakan. Ini bekerja seperti piliha konfigurasi lain apapun. Jadi, <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code> lengkap dengan tindakan dan pendaftarannya akan terlihat seperti:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Article</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">make_published</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Mark selected stories as published&quot;</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;status&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">make_published</span><span class=\"p\">]</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Article</span><span class=\"p\">,</span> <span class=\"n\">ArticleAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Kode akan memberikan kami sebuah daftar rubah admin yang terlihat sesuatu seperti ini:</p>\n<img alt=\"/id/2.1/_images/adding-actions-to-the-modeladmin.png\" src=\"/id/2.1/_images/adding-actions-to-the-modeladmin.png\" />\n<p>Itu benar-benar semua yang ada untuk itu! Jika anda sedang gatal menulis tindakan anda sendiri, anda sekarang cukup mengetahui untuk memulai. Sisanya dari dokumen ini hanya mencangkup teknik-teknik lebih lanjut.</p>\n</section>\n<section id=\"handling-errors-in-actions\">\n<h3>Penanganan kesalahan di tindakan<a class=\"heading-anchor\" href=\"#handling-errors-in-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika ada kondisi kesalahan mendatang yang mungkin muncul selagi menjalankan tindakan anda, anda harus anggun menginformasikan pengguna dari masalah. Ini berarti menangani pengecualian dan menggunakan <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.message_user\" title=\"django.contrib.admin.ModelAdmin.message_user\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.ModelAdmin.message_user()</span></code></a> untuk memperlihatkan gambaran yang ramah pengguna dari masalah di tanggapan.</p>\n</section>\n</section>\n<section id=\"advanced-action-techniques\">\n<h2>Teknik-teknik tindakan lanjutan<a class=\"heading-anchor\" href=\"#advanced-action-techniques\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ada sepasang pilihan tambahan dan kemungkinan anda dapat menggunakan lebih pilihan  lanjutan</p>\n<section id=\"actions-as-modeladmin-methods\">\n<h3>Tindakan sebagai metode <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a><a class=\"heading-anchor\" href=\"#actions-as-modeladmin-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Contoh diatas menunjukkan tindakan <code class=\"docutils literal notranslate\"><span class=\"pre\">make_published</span></code> ditentukan sebagai sebuah fungsi sederhana. Itu sangat baik, tetapi itu tidak sempurna dari titik rancangan kode dari tampilan: sejak tindakan erat digabungkan ke obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">Article</span></code>, itu masuk akal mengkaitkan tindakan ke obyek <code class=\"docutils literal notranslate\"><span class=\"pre\">ArticleAdmin</span></code> itu sendiri.</p>\n<p>Itu cukup mudah melakukan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;make_published&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">make_published</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Mark selected stories as published&quot;</span>\n</code></pre></div>\n<p>Perhatikan pertama yang kami telah pindahkan <code class=\"docutils literal notranslate\"><span class=\"pre\">make_published</span></code> kedalam metode dan dinamai kembali parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">modeladmin</span></code> pada <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code>, dan kedua kami telah sekarang menaruh string <code class=\"docutils literal notranslate\"><span class=\"pre\">'make_published'</span></code> dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">actions</span></code> daripada acuan fungsi langsung. Ini mengatakan <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> untuk mencari tindakan sebagai sebuah metode.</p>\n<p>Menentukan tindakan sebagai metode memberikan tindakan lebih mudah, akses idiomatis ke <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> itu sendiri, mengizinkan tindakan memanggil metode apapun disediakan oleh admin.</p>\n<p id=\"custom-admin-action\">Sebagai contoh, kami dapat menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> pada sebuah pesan sekejab ke pengguna menginformasikan dia bahwa tindakan telah berhasil:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n        <span class=\"n\">rows_updated</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">rows_updated</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">message_bit</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;1 story was&quot;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">message_bit</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> stories were&quot;</span> <span class=\"o\">%</span> <span class=\"n\">rows_updated</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">message_user</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> successfully marked as published.&quot;</span> <span class=\"o\">%</span> <span class=\"n\">message_bit</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ini membuat tindakan cocok apa yang admin itu sendiri lakukan setelah berhasil melakukan sebuah tindakan:</p>\n<img alt=\"/id/2.1/_images/actions-as-modeladmin-methods.png\" src=\"/id/2.1/_images/actions-as-modeladmin-methods.png\" />\n</section>\n<section id=\"actions-that-provide-intermediate-pages\">\n<h3>Tindakan yang menyediakan halaman menengah<a class=\"heading-anchor\" href=\"#actions-that-provide-intermediate-pages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Secara awalan, setelah sebuah tindakan dilakukan pengguna cukup mengalihkan kembali kehalaman  daftar rubah asli. Bagaimanapun, beberapa tindakan, khususnya satu lebih rumit, akan butuh mengembalikan halaman menengah. Sebagai contoh, tindakan hapus siap-pakai meminta untuk penegasan sebelum menghapus obyek-obyek terpilih</p>\n<p>Untuk menyediakan sebuah halaman menengah, cukup kembalikan sebuah <a class=\"reference internal\" href=\"/id/2.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> (atau subkelas) dari tindakan anda. Sebagai contoh, anda mungkin menulis sebuah fungsi ekspor sederhana yang menggunakan <a class=\"reference internal\" href=\"/id/2.1/topics/serialization/\"><span class=\"doc\">serialization functions</span></a> Django unutk membuang beberapa obyek-obyek terpilih sebagai JSON:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">serializers</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">export_as_json</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;application/json&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"n\">response</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n</code></pre></div>\n<p>Umumnya, sesuatu seperti diatas tidak dianggap ide yang hebat. Kebanyakan dari waktu, praktik terbaik akan mengembalikan sebuah <a class=\"reference internal\" href=\"/id/2.1/ref/request-response/#django.http.HttpResponseRedirect\" title=\"django.http.HttpResponseRedirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponseRedirect</span></code></a> dan pengalihan pengguna ke sebuah tamilan anda telah tulis, melewatkan daftar dari obyek-obyek terpilih di string permintaan GET. Ini mengizinkan anda menyediakan logika interaksi rumit pada halaman penengah. Sebagai contoh, jika anda ingin menyediakan fungsi ekspor lebih rumit, anda ingin membiarkan penggua memilih bentuk, dan kemungkinan daftar dari bidang-bidang untuk disertakan di export. Hal terbaik untuk melakukan adalah menulis tindakan kecil yang cukup mengalihkan tampilan ekspor penyesuaian anda:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.contenttypes.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">export_selected_objects</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">selected</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"o\">.</span><span class=\"n\">getlist</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ACTION_CHECKBOX_NAME</span><span class=\"p\">)</span>\n    <span class=\"n\">ct</span> <span class=\"o\">=</span> <span class=\"n\">ContentType</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_for_model</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/export/?ct=</span><span class=\"si\">%s</span><span class=\"s2\">&amp;ids=</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">ct</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">,</span> <span class=\"s2\">&quot;,&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">selected</span><span class=\"p\">)))</span>\n</code></pre></div>\n<p>Seperti anda dapat lihat, tindakan adalah bagian sederhana; semua logika rumit akan milik di tampilan ekspor anda. Ini akan butuh berurusan dengan obyek-obyek dari jenis apapun, dengan demikian bisnis dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code>.</p>\n<p>Meunlis tampilan ini adalah sisa dari sebuah latihan ke pembaca.</p>\n</section>\n<section id=\"making-actions-available-site-wide\">\n<span id=\"adminsite-actions\"></span><h3>Membuat tindakan tersedia lebar-situs<a class=\"heading-anchor\" href=\"#making-actions-available-site-wide\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.add_action\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">add_action</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">action</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.add_action\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Beberapa tindakan adalah terbaik jika mereka membuat tersedia pada <em>setiap</em> obyek di situs admin -- tindakan ekspor ditentukan diatas akan menjadi calon bagus. Anda dapat membuat sebuah tindakan secara global tersedia menggunakan <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.add_action\" title=\"django.contrib.admin.AdminSite.add_action\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AdminSite.add_action()</span></code></a>. Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">add_action</span><span class=\"p\">(</span><span class=\"n\">export_selected_objects</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ini membuat tindakan <code class=\"docutils literal notranslate\"><span class=\"pre\">export_selected_objects</span></code> secara global tersedia sebagai sebuah tindakan bernama &quot;export_selected_objects&quot;. Anda dapat dengan jelas memberikan tindakan sebuah nama -- bagus jika anda kemudian ingin secara program <a class=\"reference internal\" href=\"#disabling-admin-actions\"><span class=\"std std-ref\">remove the action</span></a> -- dengan melewatkan argumen kedua ke <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.add_action\" title=\"django.contrib.admin.AdminSite.add_action\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AdminSite.add_action()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">add_action</span><span class=\"p\">(</span><span class=\"n\">export_selected_objects</span><span class=\"p\">,</span> <span class=\"s1\">&#39;export_selected&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"disabling-actions\">\n<span id=\"disabling-admin-actions\"></span><h3>Meniadakan tindakan<a class=\"heading-anchor\" href=\"#disabling-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Terkadang anda butuh meniadakan beberapa tindakan -- khususnya itu <a class=\"reference internal\" href=\"#adminsite-actions\"><span class=\"std std-ref\">registered site-wide</span></a> -- untuk obyek-obyek tertentu. Ada sedikit cara anda dapat meniadakan tindakan:</p>\n<section id=\"disabling-a-site-wide-action\">\n<h4>Meniadakan tindakan lebar-situs<a class=\"heading-anchor\" href=\"#disabling-a-site-wide-action\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.disable_action\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">disable_action</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.disable_action\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Jika anda butuh meniadakan sebuah <a class=\"reference internal\" href=\"#adminsite-actions\"><span class=\"std std-ref\">site-wide action</span></a> anda dapat memanggil <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.disable_action\" title=\"django.contrib.admin.AdminSite.disable_action\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AdminSite.disable_action()</span></code></a>.</p>\n<p>Sebagai contoh, anda dapat menggunakan metode ini memindahkan tindakan &quot;delete selected objects&quot; siap-pakai:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">disable_action</span><span class=\"p\">(</span><span class=\"s1\">&#39;delete_selected&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Sekali anda telah melakukan diatas, tindakan itu akan tidak lagi tersedia lebar-situs.</p>\n<p>Jika, bagaimanapun, anda butuh mengadakan kembali tindakan ditiadakan-global untuk satu model tertentu, cukup daftar itu dengan jelas di daftar <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin.actions</span></code> anda:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Globally disable delete selected</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">disable_action</span><span class=\"p\">(</span><span class=\"s1\">&#39;delete_selected&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># This ModelAdmin will not have delete_selected available</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SomeModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;some_other_action&#39;</span><span class=\"p\">]</span>\n    <span class=\"o\">...</span>\n\n<span class=\"c1\"># This one will</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AnotherModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;delete_selected&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a_third_action&#39;</span><span class=\"p\">]</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"disabling-all-actions-for-a-particular-modeladmin\">\n<h4>Meniadakan semua tindakan untuk <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> tertentu<a class=\"heading-anchor\" href=\"#disabling-all-actions-for-a-particular-modeladmin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Jika anda ingin <em>tidak</em> tindakan dalam jumlah besar tersedia untuk <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> yang diberikan, cukup setel <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.actions\" title=\"django.contrib.admin.ModelAdmin.actions\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ModelAdmin.actions</span></code></a> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n</code></pre></div>\n<p>Ini memberitahu <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> untuk tidak memperlihatkan atau mengizinkan tindakan apapun, termasuk <a class=\"reference internal\" href=\"#adminsite-actions\"><span class=\"std std-ref\">site-wide actions</span></a> apapun.</p>\n</section>\n<section id=\"conditionally-enabling-or-disabling-actions\">\n<h4>Tindakan mengadakan dan meniadakan bersyarat<a class=\"heading-anchor\" href=\"#conditionally-enabling-or-disabling-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_actions\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_actions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_actions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Akhirnya, anda dapat secara kondisional mengadakan atau meniadakan tindakan-tindakan pada sebuah per-permintaan (dan karenanya berdasarkan per-pengguna) dengan mengutamakan <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_actions\" title=\"django.contrib.admin.ModelAdmin.get_actions\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.get_actions()</span></code></a>.</p>\n<p>Ini mengembalikan sebuah kamus dari tindakan diizinkan. Kunci-kunci adalah nama-nama tindkan, dan nilai-nilai adalah tuple <code class=\"docutils literal notranslate\"><span class=\"pre\">(function,</span> <span class=\"pre\">name,</span> <span class=\"pre\">short_description)</span></code>.</p>\n<p>Kebanyakan waktu anda akan menggunakan metode ini secara kondisional memintahkan tindakan-tindakan dari daftar dikumpulkan oleh superkelas. Sebagai contoh, jika Saya hanya menginginkan pengguna-pengguna yang nama-namanya dimulai dengan 'J' untuk dapat menghapus obyek-obyek dalam jumlah besar, Saya dapat melakukan berikut:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_actions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;J&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"s1\">&#39;delete_selected&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">actions</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">actions</span><span class=\"p\">[</span><span class=\"s1\">&#39;delete_selected&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">actions</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"setting-permissions-for-actions\">\n<span id=\"admin-action-permissions\"></span><h3>Pengaturan perizinan untuk tindakan<a class=\"heading-anchor\" href=\"#setting-permissions-for-actions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"2.1\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p>Tindakan-tindakan mungkin membatasi ketersediaan pada pengguna dengan perizinan khusus dengan mengatur sebuah atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">allowed_permissions</span></code> pada fungsi tindakan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"n\">modeladmin</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n    <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">make_published</span><span class=\"o\">.</span><span class=\"n\">allowed_permissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;change&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>Tindakan <code class=\"docutils literal notranslate\"><span class=\"pre\">make_published()</span></code> hanya akan tersedia pada pengguna yang melewatkan pemeriksaan <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission\" title=\"django.contrib.admin.ModelAdmin.has_change_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.has_change_permission()</span></code></a>.</p>\n<p>Jika <code class=\"docutils literal notranslate\"><span class=\"pre\">allowed_permissions</span></code> mempunyai lebih dari satu perizinan, tindakan akan tersedia selama pengguna melewatkan setidaknya satu pemeriksaan.</p>\n<p>Nilai-nilai tersedia untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">allowed_permissions</span></code> dan metode pemeriksaan terkait adalah:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'add'</span></code>: <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_add_permission\" title=\"django.contrib.admin.ModelAdmin.has_add_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.has_add_permission()</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'change'</span></code>: <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission\" title=\"django.contrib.admin.ModelAdmin.has_change_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.has_change_permission()</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'delete'</span></code>: <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_delete_permission\" title=\"django.contrib.admin.ModelAdmin.has_delete_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.has_delete_permission()</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'view'</span></code>: <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_view_permission\" title=\"django.contrib.admin.ModelAdmin.has_view_permission\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ModelAdmin.has_view_permission()</span></code></a></p></li>\n</ul>\n<p>Anda dapat menentukan nilai lain apapun selama anda menerapkan metode  <code class=\"docutils literal notranslate\"><span class=\"pre\">has__permission(self,</span> <span class=\"pre\">request)</span></code> sesuai pada <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code>.</p>\n<p>Sebagai contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_permission_codename</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">actions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;make_published&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;p&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">make_published</span><span class=\"o\">.</span><span class=\"n\">allowed_permissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;publish&#39;</span><span class=\"p\">,)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">has_publish_permission</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;Does the user have the publish permission?&quot;&quot;&quot;</span>\n        <span class=\"n\">opts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">opts</span>\n        <span class=\"n\">codename</span> <span class=\"o\">=</span> <span class=\"n\">get_permission_codename</span><span class=\"p\">(</span><span class=\"s1\">&#39;publish&#39;</span><span class=\"p\">,</span> <span class=\"n\">opts</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">.</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">opts</span><span class=\"o\">.</span><span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">codename</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n</section>","rootId":"admin-actions","toc":[{"title":"Menulis tindakan","anchor":"writing-actions","children":[{"title":"Menulis fungsi tindakan","anchor":"writing-action-functions","children":[]},{"title":"Menambahkan tindakan pada ModelAdmin","anchor":"adding-actions-to-the-modeladmin","children":[]},{"title":"Penanganan kesalahan di tindakan","anchor":"handling-errors-in-actions","children":[]}]},{"title":"Teknik-teknik tindakan lanjutan","anchor":"advanced-action-techniques","children":[{"title":"Tindakan sebagai metode ModelAdmin","anchor":"actions-as-modeladmin-methods","children":[]},{"title":"Tindakan yang menyediakan halaman menengah","anchor":"actions-that-provide-intermediate-pages","children":[]},{"title":"Membuat tindakan tersedia lebar-situs","anchor":"making-actions-available-site-wide","children":[]},{"title":"Meniadakan tindakan","anchor":"disabling-actions","children":[{"title":"Meniadakan tindakan lebar-situs","anchor":"disabling-a-site-wide-action","children":[]},{"title":"Meniadakan semua tindakan untuk ModelAdmin tertentu","anchor":"disabling-all-actions-for-a-particular-modeladmin","children":[]},{"title":"Tindakan mengadakan dan meniadakan bersyarat","anchor":"conditionally-enabling-or-disabling-actions","children":[]}]},{"title":"Pengaturan perizinan untuk tindakan","anchor":"setting-permissions-for-actions","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/2.1/ref/"},{"docname":"ref/contrib/index","title":"Paket contrib","url":"/id/2.1/ref/contrib/"},{"docname":"ref/contrib/admin/index","title":"Situs admin Django","url":"/id/2.1/ref/contrib/admin/"}],"prev":{"docname":"ref/contrib/admin/index","title":"Situs admin Django","url":"/id/2.1/ref/contrib/admin/"},"next":{"docname":"ref/contrib/admin/admindocs","title":"Pembangkit dokumentasi admin Django","url":"/id/2.1/ref/contrib/admin/admindocs/"},"formats":{"html":"/id/2.1/ref/contrib/admin/actions/","markdown":"/id/2.1/ref/contrib/admin/actions.md","json":"/id/2.1/ref/contrib/admin/actions.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/ref/contrib/admin/actions.txt","official":"https://docs.djangoproject.com/id/2.1/ref/contrib/admin/actions/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}