web-dev-qa-db-ja.com

Djangoを使用してテーブル内のすべてのデータを削除する方法

2つの質問があります。

  1. Djangoでテーブルを削除するにはどうすればよいですか?
  2. テーブル内のすべてのデータを削除するにはどうすればよいですか?

これは私のコードですが、成功していません:

Reporter.objects.delete()
95
zjm1126

マネージャー内:

def delete_everything(self):
    Reporter.objects.all().delete()

def drop_table(self):
    cursor = connection.cursor()
    table_name = self.model._meta.db_table
    sql = "DROP TABLE %s;" % (table_name, )
    cursor.execute(sql)
109
Tiago

最新の ドキュメント に従って、呼び出す正しいメソッドは次のようになります。

Reporter.objects.all().delete()
70
Ash

すべてのテーブルからすべてのデータを削除する場合は、python manage.py flushコマンドを試してください。これにより、テーブル内のすべてのデータが削除されますが、テーブル自体は引き続き存在します。

詳細はこちらをご覧ください: https://docs.djangoproject.com/en/1.8/ref/Django-admin/

13
user2817997

Django 1.11は、データベーステーブルからすべてのオブジェクトを削除します-

Entry.objects.all().delete()  ## Entry being Model Name. 

以下に引用されている公式Djangoドキュメントを参照してください- https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Delete()は、Manager自体で公開されていない唯一のQuerySetメソッドであることに注意してください。これは、誤ってEntry.objects.delete()を要求し、すべてのエントリを削除することを防ぐための安全メカニズムです。すべてのオブジェクトを削除する場合は、完全なクエリセットを明示的に要求する必要があります。

私自身、somefilename.py内で以下に示すコードスニペットを試しました

    # for deleting model objects
    from Django.db import connection
    def del_model_4(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(model_4)

そして、私のviews.py内には、単にHTMLページをレンダリングするビューがあります...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 

-model == model_4からのすべてのエントリの削除が終了しましたが、model_4のすべてのオブジェクトが削除されたことを確認しようとすると、管理コンソール内にエラー画面が表示されます...

ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4" 

それを考慮してください-ADMINコンソールに移動してモデルのオブジェクトを確認しようとしない場合-既に削除されている-Djangoアプリは意図したとおりに機能します。

Django admin screencapture

3
Rohit Dhankar

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

直接削除するには:

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

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

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

//同じ名前を使用しないでください

0
Ashish Gupta