41
In Django 1.7, this is actually much simpler than you think. Let’s say you have an app, books
, with two models: Book
and BookReview
. You want to remove the Book
model.
- Remove all references to the
Book
model in your code. For example, remove theForeignKey('books.Book')
field on theBookReview
model. There is no need to make a separate migration for this change. - Remove the code for the
Book
model frombooks/models.py
. Now, create a migration (manage.py makemigrations
). If you look at the migration that is generated, it should include amigrations.DeleteModel
operation. -
Run the auto-generated migration (
manage.py migrate
), and you should be asked about the relevantContentType
objects that are no longer needed:Running migrations: Applying books.0002_auto_20150314_0604... OK The following content types are stale and need to be deleted: books | book Any objects related to these content types by a foreign key will also be deleted. Are you sure you want to delete these content types?
You probably do want to delete the content types. If you don’t want to be asked for input, you can use
manage.py migrate --noinput
.The
DeleteModel
operation in this migration will drop thebooks_book
table in your database, so you don’t have to worry about manually cleaning up at all.
Source:stackexchange.com