繁体   English   中英

运行测试时不存在 Django 关系

[英]Django relation does not exist when running test

我正在使用 Django 2.2.3和 Postgres。

我正在尝试将测试添加到项目中,并且在执行django.db.utils.ProgrammingError: relation "auth_group" does not exist python./manage.py testpython./manage.py test app_name

首先,我的建议是我稍微弄乱了我的数据库架构——前段时间开发团队被要求从另一个数据库导入几个表,我已经通过使用 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还为一些 auth 表创建了模型,并且它们存在于具有旧表的应用程序的 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中删除该应用程序,完全删除该应用程序,但没有任何效果。 我在运行测试时仍然遇到这些错误

任何想法,我能做些什么来解决这个问题? 也许,这种行为是由其他原因引起的?

PS这个问题与South package的问题无关,因为它没有在这个项目中使用。

谢谢。

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

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

from django.contrib.auth.models import AbstractUser

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

事实证明,将其替换为默认的 Django 用户修复了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM