【发布时间】:2020-03-09 01:42:30
【问题描述】:
我正在使用 Django 2.2.3 和 Postgres。
我正在尝试将测试添加到项目中,并且在执行python ./manage.py test 或python ./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 还为一些 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 中删除该应用程序,完全删除该应用程序,但没有任何效果。我在运行测试时仍然遇到这些错误
任何想法,我可以做些什么来解决这个问题? 也许,这种行为是由其他原因引起的?
P.S.这个问题与 South package 的问题无关,因为它没有在这个项目中使用。
谢谢。
附言 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
)
【问题讨论】:
-
您可能弄乱了旧的迁移文件,删除数据库并重试
-
由于这些迁移已经在 prod 中应用,您可以从迁移文件中删除与
AuthGroup相关的块,从INSTALLED_APPS中删除该应用程序,然后告诉您的测试套件重新创建测试数据库。 -
@heemayl 它不起作用;(从 INSTALLED_APPS 中删除该应用程序并从迁移中删除这些块(并应用新版本的迁移)后,该错误仍然存在
-
@AlexShein 您是否重新创建了测试数据库?另外,你能添加完整的引用吗?
-
@heemayl 是的,我确实重新创建了它。执行 sql
ALTER TABLE "auth_user_groups" ADD CONSTRAINT "auth_user_groups_group_id_97559544_fk_auth_group_id" FOREIGN KEY ("group_id") REFERENCES "auth_group" ("id") DEFERRABLE INITIALLY DEFERRED失败。回溯链接:gist.github.com/AlexShein/e2224bbdffb2f18b4e0ff2f9cf052961
标签: python django django-models django-orm django-postgresql