2011-12-21 285 views
7

En Django, ¿cómo elimina los modelos que ha sincronizado en la base de datos?¿Cómo eliminar modelos de django?

Por ejemplo, en la página tutorial de Django tenido este siguiente código

from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField() 

Luego utiliza python manage.py sql polls y python manage.py sql polls para crear las tablas en la base de datos. Pero, ¿qué sucede si hago algo mal y ya no quiero ese modelo? ¿Cuál es la sintaxis para eliminarlo?

Respuesta

12

No hay sintaxis. Django no elimina tablas o columnas. Debe cambiar manualmente su base de datos o usar una herramienta de migración como South.

Si solo juegas con el tutorial, la forma más sencilla es borrar tu archivo de base de datos sqlite y ejecutar nuevamente una sincronización.

+1

No hay ningún comando manage.py que lo haga por usted? – starcorn

+4

@starcorn Pruebe django-admin.py flush –

+0

Como actualización de la versión actual 1.11 'python manage.py migra yourapp zero' deshará su migración – Sarit

0

El manejo de la base de datos de Django a través de syncdb es puramente aditivo: se agregarán nuevos modelos, pero los modelos eliminados no se eliminarán y los modelos modificados no se modificarán.

Si usted no tiene todos los datos que desea conservar, que están bien simplemente dejar caer y volver a crear la base de datos: si tiene algo que desea conservar, o incluso si intención a tener todo lo que desea conservar, No puedo aconsejarle lo suficiente como para usar una herramienta de migración: South ha sido el estándar de facto para cada proyecto en el que he trabajado.

18

Si no desea borrar y volver a sincronizar su base de datos actual, la mejor forma de hacerlo es eliminar la tabla de su modelo de forma manual:

$ python manage.py dbshell 

> (Inside the DB shell) 
> DROP TABLE {app-name}_{model-name}; 
+0

Ahora manage.py migrate se queja de que la tabla original ya no existe. – EddyTheB

1

Por qué no simplemente tratar de eliminar los modelos a partir de modelos archivo .py? Cuando se ejecuta

python manage.py makemigrations

el archivo de las migraciones debe ser actualizado con los modelos eliminados.

+0

gracias. esto asegura que pone múltiples tablas borradas con claves foráneas – Maruthi

0

Traté de comentar el modelo que quería eliminar y agregué uno nuevo. Luego, después de hacer python manage.py makemigrations, me preguntó si cambié el nombre de mi modelo. Respondí que no y el modelo anterior (comentado) fue eliminado. Así que creo que elimina ese modelo de la base de datos

Cuestiones relacionadas