tao_oat
tao_oat

Reputation: 1037

Django doesn't create any tables in Postgres database

I have an app with an initial data fixture on Django 1.8. When I run manage.py migrate, I get the following output:

Operations to perform:
  Synchronize unmigrated apps: food, locations, messages, staticfiles, core
  Apply all migrations: auth, sessions, admin, contenttypes
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
/home/myuser/venv/lib/python3.4/site-packages/django/core/management/commands/loaddata.py:229: RemovedInDjango19Warning: initial_data fixtures are deprecated. Use data migrations instead.
  RemovedInDjango19Warning

Installed 87 object(s) from 1 fixture(s)
Running migrations:
  No migrations to apply.

So it seems like the fixture was installed, but not really - when I log in to my postgres user and run psql and \dt, no tables are listed (I make sure to connect to the database first with \c mydatabase)! When trying to view the app in a browser, I get: ProgrammingError at / relation "locations_openinghours" does not exist. (Which just happens to be the first table that the app tries to access).

Upvotes: 3

Views: 5938

Answers (2)

Softinio
Softinio

Reputation: 658

You can try these steps to see if it resolves your problem:

  1. delete all the migration files for your app, as well as the database records for the app migrations in the django_migrations table.
  2. Run: python manage.py makemigrations <appname>
  3. Run: python manage.py migrate <appname>

In addition to the above you can try adding to each of your model classes the meta class setting managed = True and app_label = <name of your app>

i.e.

class Food(models.Model): class Meta: app_label = "food" managed = True

The rest of your class as you had it. Of course add this Meta for all your models. Make sure the app_label is lower case like you have it in the INSTALLED_APPS setting.

Upvotes: 2

tao_oat
tao_oat

Reputation: 1037

I solved it, but it was a silly issue. First, when running python manage.py makemigrations for the first time, you should specify which app you're migrating for - so I used python manage.py makemigrations myapp. Secondly, the way I've set up my project, manage.py uses the dev settings by default, and this was writing to an SQLite database. I added the --settings=core.settings.production flag, and it worked.

Upvotes: 1

Related Questions