Risposte:
All'interno di un manager:
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, )
per quel pezzo, lasciando il tavolo vuoto ma intatto.
Secondo l'ultima documentazione , il metodo corretto da chiamare sarebbe:
Reporter.objects.all().delete()
delete
viene chiamato il metodo dell'istanza , mentre con la delete
chiamata su QuerySet
non lo è.
Se desideri rimuovere tutti i dati da tutte le tabelle, potresti provare il comando python manage.py flush
. Ciò eliminerà tutti i dati nelle tabelle, ma le tabelle stesse continueranno a esistere.
Vedi di più qui: https://docs.djangoproject.com/en/1.8/ref/django-admin/
Django 1.11 elimina tutti gli oggetti da una tabella di database -
Entry.objects.all().delete() ## Entry being Model Name.
Fare riferimento alla documentazione ufficiale di Django qui come riportato di seguito: https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects
Notare che delete () è l'unico metodo QuerySet che non è esposto su un Manager stesso. Questo è un meccanismo di sicurezza per impedirti di richiedere accidentalmente Entry.objects.delete () e di eliminare tutte le voci. Se desideri eliminare tutti gli oggetti, devi richiedere esplicitamente un set di query completo:
Io stesso ho provato lo snippet di codice visto di seguito nel mio file 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)
e all'interno del mio views.py
ho una vista che rende semplicemente una pagina html ...
def data_del_4(request):
obj = calc_2() ##
obj.del_model_4()
return render(request, 'dc_dash/data_del_4.html') ##
ha terminato l'eliminazione di tutte le voci da - model == model_4, ma ora vedo una schermata di errore nella Console di amministrazione quando provo a verificare che tutti gli oggetti di model_4 sono stati eliminati ...
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"
Considera che - se non andiamo nella console ADMIN e proviamo a vedere gli oggetti del modello - che sono già stati eliminati - l'app Django funziona come previsto.
Ci sono un paio di modi:
Per eliminarlo direttamente:
SomeModel.objects.filter(id=id).delete()
Per eliminarlo da un'istanza:
instance1 = SomeModel.objects.get(id=id)
instance1.delete()
// non usare lo stesso nome