On Delete dan On Update
on_delete dan on_update adalah argumen pada relasi Django yang digunakan untuk menentukan perilaku saat objek yang terkait dihapus atau diupdate.
Pada umumnya, on_delete digunakan untuk menentukan perilaku saat objek induk dihapus. Argumen ini dapat diatur ke salah satu nilai berikut:
models.CASCADE: Jika objek induk dihapus, semua objek anak yang terkait juga akan dihapus secara otomatis.models.PROTECT: Jika ada objek anak yang terkait dengan objek induk, maka penghapusan objek induk tidak diperbolehkan.models.SET_NULL: Jika objek induk dihapus, nilai kunci asing pada objek anak akan diset ke NULL.models.SET_DEFAULT: Jika objek induk dihapus, nilai kunci asing pada objek anak akan diset ke nilai default.models.SET(): Jika objek induk dihapus, nilai kunci asing pada objek anak akan diset ke nilai yang diberikan sebagai argumen padaSET().models.DO_NOTHING: Jika objek induk dihapus, objek anak yang terkait tidak akan terpengaruh.
Sementara on_update digunakan untuk menentukan perilaku saat nilai kunci asing diupdate. Argumen ini dapat diatur ke salah satu nilai berikut:
models.CASCADE: Jika nilai kunci asing diupdate, maka semua objek anak yang terkait juga akan diupdate secara otomatis.models.PROTECT: Jika ada objek anak yang terkait dengan nilai kunci asing, maka penghapusan atau update nilai kunci asing tidak diperbolehkan.models.SET_NULL: Jika nilai kunci asing diupdate, dan nilai kunci asing tersebut tidak lagi terkait dengan objek lain, nilai kunci asing pada objek yang terkait akan diset ke NULL.models.SET_DEFAULT: Jika nilai kunci asing diupdate, dan nilai kunci asing tersebut tidak lagi terkait dengan objek lain, nilai kunci asing pada objek yang terkait akan diset ke nilai default.models.SET(): Jika nilai kunci asing diupdate, dan nilai kunci asing tersebut tidak lagi terkait dengan objek lain, nilai kunci asing pada objek yang terkait akan diset ke nilai yang diberikan sebagai argumen padaSET().models.DO_NOTHING: Jika nilai kunci asing diupdate, nilai pada objek yang terkait tidak akan terpengaruh.
Contoh penggunaan on_delete dan on_update pada relasi:
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
Pada contoh di atas, saat sebuah objek Author dihapus, maka semua objek Book yang terkait dengan Author tersebut juga akan dihapus secara otomatis. Hal ini disebabkan oleh pengaturan on_delete=models.CASCADE. Sedangkan saat sebuah objek Author diupdate, maka objek Book yang terkait dengan Author tersebut tidak akan terpengaruh. Hal ini disebabkan oleh pengaturan on_update=models.DO_NOTHING.