Djangoモデルのレコードを削除する方法は?


267

特定のレコードを削除したい。といった

delete from table_name where id = 1;

どうすればこれを行うことができdjango modelますか?


16
質問していただきありがとうございます。回答票の数と視聴回数で証明されるように、
RTFM

8
@Freedom_Benと合意したが、将来の読者のためにF *マニュアルとにかくように、これはあなたが探しているものであること:docs.djangoproject.com/en/dev/topics/db/queries/...
Dinei

回答:


513

いくつかの方法があります。

直接削除するには:

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

インスタンスから削除するには:

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

50
最初のものはオブジェクトの.delete()メソッドを呼び出さないので、そのメソッドに「クリーンアップ」コードがある場合は呼び出されないことに注意してください。通常は問題ありませんが、覚えておく価値はあります。
Matthew Schinckel、2009

8
@マシュー・シンケル:それは本当です。カスタムの削除メソッドが必要な場合はpre_deletepost_delete代わりにまたはシグナルを使用する必要があります。
Wolph

2
DJango 1.4以降はどうなっているのかわかりませんが、実際にはすべてのPKを取得して、それらのPKによって削除しています。したがって、たとえば、任意のフィールドで削除すると、SQLの場合よりも遅くなる可能性があります... :(
Vajk Hermecz

1
@VajkHermecz:これは真であり、削除信号のために予想される動作です。Djangoシグナルシステムは、何かが(復帰のように)フックする可能性があるため、すべてのデータベース変更を追跡する必要があります。
Wolph 2014年

3
の戻り値を使用して、delete()削除対象を確認できます。削除されたオブジェクトの数を含むタプルと、削除されたタイプに関する詳細を含むディクショナリを返します(1, {'yourapp.SomeModel': 1})
mcb 2017

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

指定された主キーを持つオブジェクトが存在しない場合、最初に指定されたオブジェクトを取得しようとするため、例外が発生します。

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

指定された主キーを持つオブジェクトが存在せず、直接クエリを生成する場合、これは例外を発生させません

DELETE FROM my_models where id=1

1
のタイプミスMyModel.object.filter(pk=1).delete()。「オブジェクト」である必要があります。
ナイジェル

8

1つのインスタンスを削除する場合は、コードを記述します

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

すべてのインスタンスを削除する場合は、コードを記述します

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

7

1つ削除したい場合

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

たとえばウィッシュリストのすべてのアイテムを削除したい場合

Wishlist.objects.all().delete()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.