You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Django中ModuleNotFoundError: No module named 'hub.forms'报错

Django中ModuleNotFoundError: No module named 'hub.forms'问题解决

问题描述

在Django项目中执行from .forms import VisitorForm语句时,持续抛出ModuleNotFoundError: No module named 'hub.forms'错误。

相关代码文件

views.py

from django.urls import reverse
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader

from .models import *
from .models import Hub
from .forms import VisitorForm


def visitors(request):
form = VisitorForm

    if request.method == 'POST':
        form = VisitorForm(request.POST)
        if form.is_valid():
            form.save()
            
    context = {'form':form}
    return render(request, 'visitors.php', context)

forms.py

from django.forms import ModelForm
from .models import Hub


class VisitorForm(ModelForm):
class Meta:
    model = Visitor
    fields = '__all__'

models.py

from django.db import models
from django import forms

class Hub(models.Model):
    myname = models.CharField(max_length=255)
    emailaddress = models.EmailField(max_length=255)
    phone = models.IntegerField(null=True)
    reply = models.TextField(null=True)
    
    class Meta:
    db_table = "hub"

    def __str__(self):
    return f"{self.myname} {self.phone}"

urls.py

from django.urls import path 
from . import views

urlpatterns = [ 
    path('visitors/', views.visitors, name="visitors"), 
]

报错堆栈信息

File "/Users/FOfem/opt/anaconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/Users/FOfem/fchub/urls.py", line 21, in <module>
    path('forra/', include('hub.urls')),
  File "/Users/FOfem/myproject/lib/python3.9/site-packages/django/urls/conf.py", line 38, in include
    urlconf_module = import_module(urlconf_module)
  File "/Users/FOfem/opt/anaconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/Users/FOfem/hub/urls.py", line 2, in <module>
    from . import views
  File "/Users/FOfem/hub/views.py", line 8, in <module>
    from .forms import VisitorForm
ModuleNotFoundError: No module named 'hub.forms'

已尝试的方法

曾在forms.py中创建名为hub的类,修改后的代码如下,但问题仍未解决:

from django.forms import ModelForm
from .models import Hub

class VisitorForm(ModelForm):
class Meta:
model = Visitor
fields = '__all__'

class hub(ModelForm):
class Meta:
model = Visitor
fields = ["myname", "emailaddress", "phone", "reply"]

    class Meta:
        db_table = "hub"

解决步骤

1. 验证文件结构与命名

确认forms.py文件确实位于hub应用的根目录下,且文件名拼写完全正确(必须是小写的forms.py,不能有大写字母或拼写错误)。Django依赖应用目录下的文件名识别模块,文件缺失或命名错误会直接触发模块找不到的异常。

2. 修复forms.py的语法与逻辑错误

原forms.py存在两个关键问题:

  • 引用了未定义的Visitor模型,你的models.py中只有Hub模型,需替换为model = Hub;
  • class Meta块缩进错误,Python是缩进敏感语言,缩进错误会导致语法异常,进而影响模块加载。

修正后的forms.py:

from django.forms import ModelForm
from .models import Hub


class VisitorForm(ModelForm):
    class Meta:
        model = Hub
        fields = '__all__'

3. 修复views.py的语法错误

原views.py中form = VisitorForm一行存在缩进错误,且未实例化表单(需加括号),同时注意Django模板文件后缀应为.html而非.php:
修正后的visitors函数:

def visitors(request):
    form = VisitorForm()

    if request.method == 'POST':
        form = VisitorForm(request.POST)
        if form.is_valid():
            form.save()
            
    context = {'form':form}
    return render(request, 'visitors.html', context)

4. 确认应用已注册到项目

打开项目根目录的settings.py,确保hub应用已添加到INSTALLED_APPS列表:

INSTALLED_APPS = [
    # 其他默认应用
    'hub',
]

5. 清除缓存并重启服务

执行以下命令清除Django缓存,然后重启开发服务器:

python manage.py clearcache
python manage.py runserver

内容的提问来源于stack exchange,提问作者Fredrick Ofem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:56:52