运行 测试时 Django 关系不存在

Django relation does not exist when running test

我正在使用 Django 2.2.3 和 Postgres。

我正在尝试将测试添加到项目中,并且在执行 python ./manage.py testpython ./manage.py test app_name 时,在测试数据库创建步骤中不断 运行 出现错误 django.db.utils.ProgrammingError: relation "auth_group" does not exist .

首先,我的建议 是我把我的数据库模式弄乱了一点——前段时间开发团队被要求从另一个数据库导入几个表,我'我们是通过使用 pgsql 直接导入来完成的。比我使用 python manage.py inspectdb 创建模型并将它们放入单独的应用程序中。 该命令创建了一个初始迁移,看起来像这样:

class Migration(migrations.Migration):

initial = True

dependencies = []

operations = [
    migrations.CreateModel(
        name='SomeModelName',
        fields=[
            (
                'id',
                models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
            ),
            ('some_other_field)', models.CharField(max_length=254, unique=True)),
        ],
        options={'db_table': 'some_existing_table_name', 'managed': False,},
    ),

一切正常,因为我已经创建并应用了几次迁移,没有任何问题。但现在我被那个测试问题困住了。

经过简短调查后,我发现 inspectdb 还为某些身份验证表创建了模型,并且它们存在于 models.py 具有旧表的应用程序中。因此,以下几行出现在所讨论的应用程序的初始迁移中:

        migrations.CreateModel(
        name='AuthGroup',
        fields=[
            (
                'id',
                models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
            ),
            ('name', models.CharField(max_length=80, unique=True)),
        ],
        options={'db_table': 'auth_group', 'managed': False,},
    ),

并在 models.py 中:

class AuthGroup(models.Model):
name = models.CharField(unique=True, max_length=80)

class Meta:
    managed = False
    db_table = 'auth_group'

我认为这可能与某个问题有关,但我已尝试从 INSTALLED_APPS 中删除该应用程序,完全删除该应用程序,但没有任何效果。我在 运行 测试

时仍然遇到这些错误

有什么想法吗?我该怎么做才能解决这个问题? 也许,这种行为是由其他原因引起的?

P.S.这个问题与南方包的问题无关,因为它没有在这个项目中使用。

谢谢。

P.P.S. INSTALLED_APPS:

INSTALLED_APPS = (
[
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
+ PROJECT_APPS
+ THIRD_PARTY_APPS
)

我发现这个问题在某种程度上与自定义用户模型有关,该模型是通过以下方式声明的:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    class Meta:
        db_table = 'auth_user'

事实证明,用默认的 Django 用户替换它可以解决问题。