ฉันมีสองคำถาม:
- ฉันจะลบตารางใน Django ได้อย่างไร
- ฉันจะลบข้อมูลทั้งหมดในตารางได้อย่างไร
นี่คือรหัสของฉันซึ่งไม่สำเร็จ:
Reporter.objects.delete()
ฉันมีสองคำถาม:
นี่คือรหัสของฉันซึ่งไม่สำเร็จ:
Reporter.objects.delete()
คำตอบ:
ภายในผู้จัดการ:
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)
'DELETE FROM %s' % (table_name, )
สำหรับบิตนั้นโดยปล่อยให้โต๊ะว่างเปล่า แต่ไม่เสียหาย
ตามเอกสารล่าสุดวิธีการโทรที่ถูกต้องคือ:
Reporter.objects.all().delete()
delete
วิธีนี้จะเรียกวิธีการของอินสแตนซ์ในขณะที่มีการdelete
เรียกใช้QuerySet
มันไม่
python manage.py flush
หากคุณต้องการที่จะลบข้อมูลทั้งหมดจากตารางของคุณทั้งหมดที่คุณอาจต้องการที่จะลองสั่ง การดำเนินการนี้จะลบข้อมูลทั้งหมดในตารางของคุณ แต่ตารางจะยังคงอยู่
ดูเพิ่มเติมที่นี่: https://docs.djangoproject.com/en/1.8/ref/django-admin/
ใช้เปลือก
1) สำหรับการลบตาราง:
python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}
2) สำหรับการลบข้อมูลทั้งหมดออกจากตาราง:
python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()
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 () เป็นเมธอด 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 แต่ตอนนี้ฉันได้เห็นหน้าจอ Error ภายในคอนโซลผู้ดูแลระบบเมื่อฉันพยายามที่จะตรวจสอบว่าวัตถุทั้งหมดของ 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"
ลองพิจารณาดูว่าหากเราไม่ไปที่คอนโซลผู้ดูแลระบบและลองดูวัตถุของโมเดลซึ่งถูกลบไปแล้วแอป Django ก็ทำงานได้ตามที่ตั้งใจไว้
มีสองวิธี:
หากต้องการลบโดยตรง:
SomeModel.objects.filter(id=id).delete()
ในการลบออกจากอินสแตนซ์:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
// อย่าใช้ชื่อเดียวกัน