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.