运行时错误:模型没有声明明确的app_label,也不在INSTALLED_APPS中的应用程序中。

4

我正在使用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'
]

我正在终端中运行命令“python manage.py test”。 - ShTurj
你好 @ShTurj,尝试在你的 INSTALLED_APPS 中添加完整的应用程序位置,例如 ***(accounts.apps.AccountsConfig)***。 - Ankit Tiwari
我对Django框架还有点陌生。要将安装的应用程序Doggiesitter.accounts.Accountsconfig添加到其中,其中Accounts是类名? - ShTurj
这个回答解决了你的问题吗?Django模型“没有声明明确的app_label” - Hamidreza Khorammfar
我尝试了,但对我来说没有起作用。 - ShTurj
显示剩余3条评论
1个回答

1

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

每当运行具有相对导入的测试时,我都会遇到这个问题,例如from .models import ModelName。搜索了一个小时左右后,我偶然发现了我正在关注的教程的确切答案

在我的情况下,我尝试使用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')

...但我认为我更喜欢更简单明确的导入语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接