13

I'm using AbstractBaseUser for my user models in various projects. Updating to Django 1.8 RC1 works smoothly and I can run the migrate management command. However, when trying to create a fresh database table layout from scratch, I get the following error:

python manage.py migrate
>>> ...
>>> ...
>>> django.db.utils.ProgrammingError: relation "auth_group" does not exist

All works perfectly with Django 1.7.x and I cannot find anything about this issue elsewhere. So, is it a big with the RC1 version or did something change that I'm not aware of in Django 1.8? Unfortunately, the error message doesn't really help ... but I'm pretty sure it has to do with the automatic migrations that come with the new Django version.

Simon Steinberger
  • 6,605
  • 5
  • 55
  • 97

4 Answers4

16

To copy the answer I got from the Django ticket mentioned above: Before calling "python manage.py migrate" to create the database layout, one needs to create a migration for the app that contains the custom user class:

python manage.py makemigrations appname

This creates a migration file within the app directory - et voilà, migrate does work and creates the other tables.

Simon Steinberger
  • 6,605
  • 5
  • 55
  • 97
7

I'm using:

./manage.py makemigrations

then

./manage.py migrate auth

and then

./manage.py migrate
Nick Korolkov
  • 433
  • 6
  • 5
1

I faced a very similar issue, complaining about relation "auth_group" does not exist however with Django 1.10.

The python manage.py makemigrations appname did not help me as well.

Even the python manage.py showmigrations was not working either, both of them raised the same error.

After examining the traceback in detail, I found out, that in one of my class-based views I was defining the queryset class variable in the following way:

Class SomeClassBasedView(ListView):
    queryset = User.objects.filter(groups=Group.objects.get(name='Tester'))

After changing this to override the get_queryset function intead, it was working properly.

Class SomeClassBasedView(ListView):
     def get_queryset(self):
         return User.objects.filter(groups=Group.objects.get(name='Tester'))
Lepi
  • 457
  • 2
  • 12
  • how does 'queryset' affect? – Diansheng Oct 20 '16 at 07:07
  • Wow, thank you so much. After about two hours of searching through all the other answers this finally solved my problem. It's not the 'queryset' that caused it, it's the `Group.objects.get(name='Tester')` Once I commented out those lines, `makemigrations` and 'migrate' work fine. However, when I put the lines back in I get `Group matching query does not exist`. Obviously, I need to write that bit of code more carefully, but I really didn't expect it to cause problems setting up the database. – Lewy Blue Jul 28 '19 at 13:40
  • I'm using Django 2.2 by the way – Lewy Blue Jul 28 '19 at 13:51
0

I've faced almost the same issue with Django 1.8, solved it only by running manage.py makemigrations app_name for the app with custom User model (+read below)

e.g.:

# some_app/models.py:
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    pass

AND FOR EVERY app that contained ForeignKey, OneToOneField etc references to it, e.g.:

# another_app/models.py:
from django.conf import settings
from django.db import models


class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

then manage.py migrate worked with no errors

the same approach works for any app containing extensions to django.contrib models, e.g. FlatPages etc...

Bob
  • 5,809
  • 5
  • 36
  • 53