Bagaimana cara menghapus catatan dalam model Django?

267

Saya ingin menghapus catatan tertentu. Seperti

delete from table_name where id = 1;

Bagaimana saya bisa melakukan ini dalam django model?

pengguna426795
sumber
16
Terima kasih telah mengajukan pertanyaan. Terkadang RTFM membutuhkan waktu yang jauh lebih lama daripada pencarian Google dan SO, sebagaimana dibuktikan dengan jumlah suara jawab dan jumlah tampilan
Freedom_Ben
8
Setuju dengan @Freedom_Ben, tetapi bagi pembaca masa depan yang menyukai manual f *, inilah yang Anda cari: docs.djangoproject.com/en/dev/topics/db/queries/…
Dinei

Jawaban:

513

Ada beberapa cara:

Untuk menghapusnya secara langsung:

SomeModel.objects.filter(id=id).delete()

Untuk menghapusnya dari instance:

instance = SomeModel.objects.get(id=id)
instance.delete()
Wolph
sumber
50
Perhatikan bahwa yang pertama tidak akan memanggil metode .delete () dari objek, jadi jika Anda memiliki kode 'pembersihan' dalam metode itu tidak akan dipanggil. Umumnya bukan masalah, tapi patut diingat.
Matthew Schinckel
8
@ Matthew Schinckel: itu benar. Jika Anda ingin memiliki metode penghapusan khusus daripada yang seharusnya Anda gunakan pre_deleteatau post_deletesinyal.
Wolph
2
Saya tidak tahu apa masalahnya setelah DJango 1.4, tapi ini sebenarnya mengambil semua PK dan kemudian dihapus oleh PK itu. Jadi mis. Jika Anda menghapus dengan bidang arbitrer, ini bisa menjadi cara yang lebih lambat maka mitra SQL ... :(
Vajk Hermecz
1
@ VajkHermecz: itu benar dan perilaku yang diharapkan karena sinyal hapus. Sistem sinyal Django harus melacak semua perubahan basis data karena sesuatu dapat terhubung dengannya (seperti halnya pembalikan).
Wolph
3
Anda dapat menggunakan nilai balik delete()untuk memeriksa apa yang Anda hapus. Ini mengembalikan tuple dengan jumlah objek yang dihapus dan kamus dengan detail tentang jenis yang dihapus, misalnya (1, {'yourapp.SomeModel': 1}).
mcb
37
MyModel.objects.get(pk=1).delete()

ini akan memunculkan pengecualian jika objek dengan kunci utama yang ditentukan tidak ada karena pada awalnya ia mencoba untuk mengambil objek yang ditentukan.

MyModel.objects.filter(pk=1).delete()

ini tidak akan menimbulkan pengecualian jika objek dengan kunci utama yang ditentukan tidak ada dan secara langsung menghasilkan kueri

DELETE FROM my_models where id=1
Milad Khodabandehloo
sumber
1
Mengetik dalam MyModel.object.filter(pk=1).delete(). Seharusnya "benda".
Nigel
8

jika Anda ingin menghapus satu contoh maka tulis kodenya

delet= Account.objects.get(id= 5)
delet.delete()

jika Anda ingin menghapus semua instance maka tulis kodenya

delet= Account.objects.all()
delete.delete()
islam yang indah
sumber
7

Jika Anda ingin menghapus satu item

wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()

Jika Anda ingin menghapus semua item di Wishlist misalnya

Wishlist.objects.all().delete()
Ahmed Adewale
sumber
6

Wolph memberikan kode fokus jawaban yang baik. Biarkan saya tempelkan dokumen resmi di sini, untuk referensi orang.

VicX
sumber