[英]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 test
或python./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.