ジャンゴの複数のオブジェクトを削除する


104

Webページを使用して、djangoのデータベースから削除するオブジェクトをいくつか選択する必要があります。選択できるカテゴリがないため、このようにすべてから削除することはできません。独自の削除フォームを実装してdjangoで処理する必要がありますか、それともdjangoはすでにこれを行う方法を持っていますか?管理インターフェースに実装されています。

回答:


200

必要なQuerySetを削除できます。たとえば、Postモデルを含むすべてのブログ投稿を削除するには

Post.objects.all().delete()

公開日が将来の投稿を削除する

Post.objects.filter(pub_date__gt=datetime.now()).delete()

ただし、クエリセットを絞り込む方法を考え出す必要があります。ビューで特定のオブジェクトを削除するだけの場合は、汎用ビュー削除を調べてください

編集:

誤解してすみません。答えはその中間だと思います。独自のビューを実装するには、ModelForm汎用ビューを組み合わせます。それ以外の場合は、同様の機能を提供するサードパーティのアプリを調べてください。関連する質問、推奨はしたDjangoのフィルタ


1
質問を誤解したことはありません。すべて削除できることを理解しています。しかし、私はWebページのフォームで削除するオブジェクトを選択する必要があります。次に、フォームから返されたデータを私のviews.pyで処理します。次に、フォームで返されたものをループして、データをループします。しかし、私はこれをdjangoで実装するためのベストプラクティスが何であるか知りたいと思いました。
ディーン

ああ、私の間違い!私はサードパーティのアプリか、ModelForms を使った一般的なビューを使用します。
Matt Luongo、2012

7
@Dean、その削除ビューを見てください。または、独自のビューを作成することもできます...つまり、最終的にはPKのリストを受け取り、モデルで削除を呼び出すことになります... MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete()そして、ランダムな人がすべてを削除できないことを確認するための何かが欲しいと確信していますPKを推測することにより、DB内のオブジェクト。
Yuji 'Tomita' Tomita

1
@Dean、それについてもっと理解せずにあなたの質問に答えるのは難しいです。ユーザーが正しい削除基準を選択できるフォームを作成する必要があります(それが何であれ、おそらくID番号を入力する入力ボックスでさえ...しかし、おそらくより複雑です)、それに応答するビューを作成しますフォーム、おそらく検証(権限)を実行し、最後にそのfilter(foo).delete()メソッドを実行します。
Yuji 'Tomita' Tomita

1
これがフレームワークに付属していない理由の1つは、@ YujiTomitaによって言及された編集/削除およびその他の複雑さに対する承認の問題です。本当に複雑なフィルタリングが必要な場合は、django-filteringをチェックして、ユーザーが承認されている場合にQuerySet.delete()を呼び出す削除ボタンを追加してください。
Matt Luongo、2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.