Sinyal simpan / hapus umumnya menguntungkan dalam situasi di mana Anda perlu membuat perubahan yang tidak sepenuhnya spesifik untuk model yang dimaksud, atau dapat diterapkan pada model yang memiliki kesamaan, atau dapat dikonfigurasi untuk digunakan di berbagai model.
Satu tugas umum dalam save
metode yang diganti adalah pembuatan siput otomatis dari beberapa bidang teks dalam model. Itu adalah contoh dari sesuatu yang, jika Anda perlu mengimplementasikannya untuk sejumlah model, akan mendapat manfaat dari penggunaan pre_save
sinyal, di mana penangan sinyal dapat mengambil nama bidang siput dan nama bidang untuk menghasilkan siput. Setelah Anda memiliki sesuatu seperti itu, semua fungsionalitas yang ditingkatkan yang Anda tempatkan juga akan berlaku untuk semua model - misalnya mencari siput yang akan Anda tambahkan untuk jenis model yang dimaksud, untuk memastikan keunikan.
Aplikasi yang dapat digunakan kembali sering kali mendapat manfaat dari penggunaan sinyal - jika fungsionalitas yang mereka sediakan dapat diterapkan ke model apa pun, mereka umumnya (kecuali jika tidak dapat dihindari) tidak ingin pengguna harus langsung memodifikasi model mereka untuk mendapatkan manfaat darinya.
Dengan django-mptt , misalnya, saya menggunakan pre_save
sinyal untuk mengelola sekumpulan bidang yang menjelaskan struktur pohon untuk model yang akan dibuat atau diperbarui dan pre_delete
sinyal untuk menghapus detail struktur pohon untuk objek yang dihapus dan keseluruhannya. sub-pohon objek sebelumnya dan mereka akan dihapus. Karena penggunaan sinyal, pengguna tidak perlu menambah atau memodifikasi save
atau delete
metode pada model mereka untuk melakukan manajemen ini untuk mereka, mereka hanya perlu membiarkan django-mptt mengetahui model mana yang mereka inginkan untuk dikelola.
Kamu bertanya:
Akankah ada keuntungan menggunakan operator sinyal Django?
Saya menemukan ini di dokumen django:
Dari: Mengganti metode model yang telah ditentukan sebelumnya
sumber
save
metode"?Jika Anda menggunakan sinyal, Anda dapat memperbarui Skor ulasan setiap kali model skor terkait disimpan. Tetapi jika tidak membutuhkan fungsionalitas seperti itu, saya tidak melihat alasan untuk memasukkan ini ke dalam sinyal, itu hal-hal yang berhubungan dengan model yang cantik.
sumber
Ini semacam denormalisasi. Lihat solusi cantik ini . Definisi bidang komposisi di tempat.
sumber
Tambahan kecil dari dokumen Django tentang penghapusan massal (
.delete()
metode padaQuerySet
objek):https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects
Dan pembaruan massal (
.update()
metode padaQuerySet
objek):https://docs.djangoproject.com/en/2.1/ref/models/querysets/#update
sumber