Django中无法导入models模块问题求助
Django导入模块错误:ModuleNotFoundError: No module named 'dashboard'
错误内容
执行导入语句时触发报错:
from dashboard.models import Customer, Lines, Devices # 报错:ModuleNotFoundError: No module named 'dashboard'
相关配置与代码
apps.py
from django.apps import AppConfig class DashboardConfig(AppConfig): name = 'dashboard'
settings.py 的 INSTALLED_APPS 配置
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sessions', 'dashboard' ]
models.py
from django.db import models class Customer(models.Model): account_name = models.CharField(default='', max_length=254, null=True, blank=True) accountNumber = models.CharField(default='', max_length=30, null=True, blank=True) accountType = models.CharField(default='', max_length=40, null=True, blank=True) allowDangerousExtensions = models.BooleanField(default=False) billingCycleDay = models.IntegerField(default=0) @property def customer_name(self): return (self.account_name) class Lines(models.Model): accountId = models.CharField(default='', max_length=30, null=True, blank=True) deviceName = models.CharField(default='', max_length=10, null=True, blank=True) deviceTypeId = models.CharField(default='', max_length=100, null=True, blank=True) def __str__(self): return self.accountId() class Devices(models.Model): uid = models.CharField(default='', max_length=30, null=True, blank=True) online = models.BooleanField(default=False) customer = models.ForeignKey(Customer, blank=True, null=True, on_delete=models.CASCADE) def __str__(self): return self.name()
api.py
from dashboard.models import Customer, Lines, Devices def create_customer(): customer = Customer.objects.create()
项目目录结构
- 项目根目录
- api.py
- dashboard/
- init.py
- admin.py
- apps.py
- models.py
异常现象
admin.py中可以正常导入dashboard.models,但api.py执行相同导入语句时触发模块找不到错误。
解决方法
1. 用Django官方方式运行脚本
不要直接执行python api.py,改用manage.py启动的shell运行代码:
python manage.py shell
在shell中导入并执行api模块的逻辑;或者将api中的功能封装成Django自定义命令,通过python manage.py [你的命令名]运行。
2. 手动初始化Django环境(直接运行api.py时)
如果必须直接运行api.py,在文件开头添加代码初始化Django环境并将项目根目录加入Python路径:
import sys import os # 定位项目根目录 project_root = os.path.dirname(os.path.abspath(__file__)) sys.path.append(project_root) # 初始化Django配置 import django from django.conf import settings if not settings.configured: settings.configure( DEBUG=True, INSTALLED_APPS=[ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sessions', 'dashboard' ], DATABASES={ 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(project_root, 'db.sqlite3'), } } ) django.setup() # 后续导入和业务代码 from dashboard.models import Customer, Lines, Devices def create_customer(): customer = Customer.objects.create()
3. 确认模块标识文件存在
检查dashboard文件夹下是否有__init__.py文件(空文件即可),Python需要这个文件识别该目录为可导入模块。
内容的提问来源于stack exchange,提问作者Doing Things Occasionally
相关产品推荐
相关产品推荐

