Django modellerinde bir kayıt nasıl silinir?


267

Belirli bir kaydı silmek istiyorum. Gibi

delete from table_name where id = 1;

Bunu nasıl yapabilirim django model?


16
Soruyu sorduğunuz için teşekkürler. Bazen RTFM, yanıtlama oylarının sayısı ve görüntülenme sayısı ile kanıtlandığı gibi bir Google aramasından ve SO'dan çok daha uzun sürer
— Freedom_Ben

8
@Freedom_Ben ile ancak gelecek okuyucular için Anlaştık f * manuel neyse gibi, bu aradığınız ne olduğunu: docs.djangoproject.com/en/dev/topics/db/queries/...
— Dinei

Yanıtlar:


512

Birkaç yol vardır:

Doğrudan silmek için:

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

Bir örnekten silmek için:

instance = SomeModel.objects.get(id=id)
instance.delete()

50
Birincisinin nesnenin .delete () yöntemini çağırmayacağını unutmayın, bu nedenle bu yöntemde 'cleanup' kodunuz varsa çağrılmaz. Genellikle bir sorun değil, akılda tutmaya değer.
— Matthew Schinckel

8
@Matthew Schinckel: bu doğru. Özel bir silme yöntemine sahip olmak istiyorsanız bunun yerine pre_deleteveya post_deletesinyalini kullanmalısınız.
— Wolph

2
DJango 1.4'ten sonra durumun ne olduğunu bilmiyorum, ama bu aslında tüm PK'ları getiriyor ve daha sonra bu PK'lar tarafından siliniyor. Örneğin, rastgele bir alanla silerseniz, bu SQL
— karşıtından çok

1
@VajkHermecz: silme sinyalleri nedeniyle bu doğru ve beklenen davranış. Django sinyal sistemi tüm veritabanı değişikliklerini izlemek zorundadır, çünkü bir şey ona bağlanabilir (geri dönüşün yaptığı gibi).
— Wolph

3
Sildiğiniz değeri delete()kontrol etmek için öğesinin dönüş değerini kullanabilirsiniz . Silinen nesnelerin sayısını içeren bir grup ve silinen türlerle ilgili ayrıntıları içeren bir sözlük, ör (1, {'yourapp.SomeModel': 1}).
— mcb

37
MyModel.objects.get(pk=1).delete()

Belirtilen birincil anahtara sahip nesne yoksa ilk başta belirtilen nesneyi almaya çalıştığında bu durum istisna oluşturur.

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

belirtilen birincil anahtara sahip nesne yoksa ve doğrudan sorguyu üretirse, bu durum özel durum oluşturmaz

DELETE FROM my_models where id=1

1
Yazım hatası MyModel.object.filter(pk=1).delete(). "Nesneler" olmalıdır.
— Nigel

8

bir örneği silmek istiyorsanız kodu yazın

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

tüm örneği silmek istiyorsanız kodu yazın

delet= Account.objects.all()
delete.delete()

7

Bir öğeyi silmek istiyorsanız

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

Örneğin, İstek Listesindeki tüm öğeleri silmek istiyorsanız

Wishlist.objects.all().delete()

6

Wolph iyi bir cevap odaklı kodlar sağlamıştır. İnsanların referansı için resmi dokümanı buraya yapıştırmama izin verin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.