django 运行时错误:模型未声明显式app_label,并且不在INSTALLED_APPS的应用程序中

polhcujo  于 2023-02-20  发布在  Go
关注(0)|答案(1)|浏览(250)

我正在Django中编写一个应用程序,我试图做一些单元测试,但我似乎找不到为什么测试失败,这是测试页面:

import re
from django.test import TestCase
from django.urls import reverse
from . import models


class BasicTests(TestCase):

    def test_firstname(self):
        print('test11')
        acc = models.Accounts()
        acc.first_name = 'Moran'
        self.assertTrue(len(acc.id) <= 9, 'Check name is less than 50 digits long')
        self.assertFalse(len(acc.id) > 50, 'Check name is less than 50 digits long')

我得到的错误是:
运行时错误:模型类DoggieSitter. accounts. models. Accounts没有声明显式的app_label,也不在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',
    'accounts'
]
ddrv8njm

ddrv8njm1#

TLDR;:尝试将上面的第4行更改为显式导入,例如from DoggieSitter.accounts import models

每当运行tests.pyfrom .models import ModelName这样的相对导入的测试时,我都会遇到这个问题。在搜索了大约一个小时后,我偶然发现了this answer to exactly the tutorial I was following
在我的例子中,我尝试了from .models import Recipe。我的项目结构如下所示,所以我改为from apps.recipes.models import Recipe,现在测试运行良好。这是一个遗憾,因为我宁愿继续使用相对导入。

src
├── __init__.py
├── apps
│   ├── accounts
│   ├── core
│   └── recipes
│   │   ├── models.py
│   │   ├── ... etc
├── config
│   ├── __init__.py
│   ├── admin.py
│   ├── asgi.py
│   ├── db.sqlite3
│   ├── secrets
│   ├── settings
│   │   ├── __init__.py
│   │   ├── base
│   │   └── development
│   ├── tests.py
│   ├── urls.py
│   ├── utilities.py
│   └── wsgi.py
├── manage.py
├── static
└── templates

PS -另一个更明确的方式,似乎也工作是:

from django.apps import apps
Recipe = apps.get_model(app_label='recipes', model_name='Recipe')

......但我想我更喜欢更简单的显式import语句。

相关问题