Подтвердить что ты не робот

Django 1.8 RC1: ProgrammingError при создании таблиц базы данных

Я использую AbstractBaseUser для своих моделей пользователей в различных проектах. Обновление Django 1.8 RC1 работает плавно, и я могу запустить команду управления миграцией. Однако при попытке создать новый макет таблицы базы данных с нуля я получаю следующую ошибку:

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

Все отлично работает с Django 1.7.x, и я ничего не могу найти об этой проблеме в другом месте. Итак, это большая версия RC1 или что-то изменилось, что я не знаю в Django 1.8? К сожалению, сообщение об ошибке действительно не помогает... но я уверен, что это связано с автоматическими переходами, которые поставляются с новой версией Django.

4b9b3361

Ответ 1

Чтобы скопировать ответ, полученный мной из билета Django, упомянутого выше: перед вызовом "python manage.py migrate" для создания макета базы данных необходимо создать миграцию для приложения, которое содержит пользовательский класс:

python manage.py makemigrations appname

Это создает файл миграции в каталоге приложения - et voilà, миграция работает и создает другие таблицы.

Ответ 2

Я использую:

./manage.py makemigrations

затем

./manage.py migrate auth

а затем

./manage.py migrate

Ответ 3

Я столкнулся с очень похожими проблемами, жалуясь на relation "auth_group" does not exist, но с Django 1.10.

python manage.py makemigrations appname тоже не помог мне.

Даже python manage.py showmigrations тоже не работал, оба из них подняли ту же ошибку.

После тщательного изучения трассировки я узнал, что в одном из моих представлений на основе класса я определял переменную класса queryset следующим образом:

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

После изменения этого параметра, чтобы переопределить функцию get_queryset, она работала правильно.

Class SomeClassBasedView(ListView):
     def get_queryset(self):
         return User.objects.filter(groups=Group.objects.get(name='Tester'))

Ответ 4

Я столкнулся почти с той же проблемой с Django 1.8, решив ее, запустив manage.py makemigrations app_name для приложения с пользовательской моделью пользователя (+ прочитайте ниже)

например:.

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


class User(AbstractUser):
    pass

И ДЛЯ КАЖДОГО, содержащего ссылки ForeignKey, OneToOneField и т.д., например:

# 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)

тогда manage.py migrate работал без ошибок

тот же подход работает для любого приложения, содержащего расширения для моделей django.contrib, например. FlatPages и т.д.