auth_user error with Django 1.8 and syncdb / migrate

前端 未结 8 913
独厮守ぢ
独厮守ぢ 2021-01-31 14:03

When upgrading to Django 1.8 (with zc.buildout) and running syncdb or migrate, I get this message:

django.db.utils.ProgrammingError: relation \"auth_user\" does no

相关标签:
8条回答
  • 2021-01-31 14:42

    I've migrated an old Django 1.6 project to Django 1.8 and previously we've used syncdb to migrate the database and we did not have initial migration steps for all apps in our project. With Django 1.8, you'll need a working database migrations. Running

    manage.py makemigrations <app_name>
    

    for all apps in our project fixed our problems.

    0 讨论(0)
  • 2021-01-31 14:47

    Try referring to the User using this

    from django.conf import settings
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(app_label)s_%(class)s_user', blank=True, null=True, editable=False)
    
    0 讨论(0)
  • 2021-01-31 14:50

    On my environment, I fix this running makemigrations on all apps that have relationship with django.contrib.auth.models:

    manage.py makemigrations app_with_user_relation
    manage.py migrate
    
    0 讨论(0)
  • 2021-01-31 14:57

    To fix this problem here is what I did:

    1) Find all foreign key relation fields like OneToOneField, ForeignKey and ManyToManyFields in your project, including any reusable apps that are referring to auth.User or import User and set it to settings.AUTH_USER_MODEL as above. At minimum use:

    'auth.User'
    

    2) For all the models that have the above, make sure the models have a valid django migration (not south). If they have south migrations, rename the directory to migrations_south and then run the makemigrations command for that app:

    ./manage.py makemigrations affected_app
    

    Sometimes there is a django migrations folder under a different name, not the default migrations directory. In such cases, reference this via MIGRATION_MODULES in your settings.py:

    MIGRATION_MODULES = {'filer': 'filer.migrations_django'}
    

    Since the issue was hard to find on larger projects, I commented out all custom apps in INSTALLED_APPS in settings.py and ran the test command, since it will run migrate and try to re-create the database for you:

    ./manage.py test
    

    Looks like that fixed it for me. I'm not sure if step 1 is mandatory or just best practice. But you definitely need to convert the apps to migrations.

    Cheers!

    PS. Be ready for what's coming in Django 1.9. The syncdb command will be removed. The legacy method of syncing apps without migrations is removed, and migrations are compulsory for all apps.

    0 讨论(0)
  • 2021-01-31 15:00

    If you are using heroku like I was run

    heroku run python manage.py makemigrations
    

    This will likely give you a message saying there are now changes. Ignore that then run

    heroku run python manage.py migrate
    

    this will give you some output suggesting something has been done. Finally run

    heroku run python manage.py createsuperuser
    
    0 讨论(0)
  • 2021-01-31 15:08

    I fix this by running auth first, then the rest of my migrations:

    python manage.py migrate auth
    python manage.py migrate
    
    0 讨论(0)
提交回复
热议问题