[英]django.db.utils.ProgrammingError: relation “…” does not exist
[英]Django Rest Framework “django.db.utils.ProgrammingError: relation ”patient“ does not exist”
我在我的项目中使用Django Rest Framework。 我已经写过测试:
class PatientTests(APITestCase):
def test_create_patient(self):
url = reverse('patient-list')
data = {'firstname': 'ivan', 'lastname': 'ivanov'}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Patient.objects.count(), 1)
self.assertEqual(Patient.objects.get().firstname, 'ivan')
def test_get_patient(self):
url = reverse('patient-detail', args=[1])
response = self.client.get(url)
self.assertEqual(response.data, {'firstname': 'ivan'})
models.py
class Patient(models.Model):
firstname = models.TextField()
lastname = models.TextField()
secondname = models.TextField()
class Meta:
db_table = "patient"
managed = False
def __str__(self):
return ' '.join([
self.firstname,
self.lastname,
])
运行测试时,出现错误:“ django.db.utils.ProgrammingError:关系“患者”不存在”。 据我了解,如果未在测试数据库中创建表,则会发生此错误。 我必须做什么? 谢谢
首先从项目中删除所有.pyc文件,然后依次运行以下命令。
$ django-admin.py migrate auth
$ django-admin.py migrate contentypes
$ django-admin.py migrate sites
$ django-admin.py migrate YOUR_USER_APP
$ django-admin.py migrate
如果这不起作用,则对所有应用程序一一使用makemigrations,如下所示:
$ python manage.py makemigrations
$ python manage.py migrate --fake
并确保删除所有扩展名为.pyc的文件。
为此,请从您的代码中删除“ managed = False” 。 该错误是因为数据库中没有名为“病人”的表。
为了为测试创建模型,我使用的一种常见模式是在执行测试之前将它们标记为已托管。 为此,您可以创建一个自定义测试运行程序并setup_test_environment
:
class CustomRunner(DiscoverRunner):
def setup_test_environment(self, *args, **kwargs):
from django.db.models.loading import get_models
self.unmanaged_models = [
m for m in get_models() if not m._meta.managed
]
for m in self.unmanaged_models:
m._meta.managed = True
然后测试设置将以字符串形式指定测试运行器的模块路径:
TEST_RUNNER = module.path.to.CustomRunner
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.