突然出现“没有名为models的模块”

0 投票
1 回答
1035 浏览
提问于 2025-04-18 10:13

我有一个项目,里面有三个应用,分别叫做 projects、specimens 和 tests。之前一切都运行得很好,直到我做了一个改动(我不记得具体是什么了)。之后,Django 就报错了,提示 ImportError: No module named models. 我想不明白问题出在哪里,因为我觉得我的引用和组织都很正确。

这是我遇到的错误:

ImportError at /

No module named models

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Django Version:     1.5.5
Exception Type:     ImportError
Exception Value:    

No module named models

Exception Location:     /home/david/mysqldb/dev/mysqldb/teams_db/specimens/views.py in <module>, line 11
Python Executable:  /usr/bin/python
Python Version:     2.7.5

这是我的错误追踪信息:

/home/david/mysqldb/dev/mysqldb/teams_db/teams_db/urls.py in <module>

        (r'^specimens/', include('specimens.urls')),

▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/conf/urls/__init__.py in include

            urlconf_module = import_module(urlconf_module)

▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py in import_module

        __import__(name)

▶ Local vars
/home/david/mysqldb/dev/mysqldb/teams_db/specimens/urls.py in <module>

    from views import new_specimen, list_specimens, info_specimen

▶ Local vars
/home/david/mysqldb/dev/mysqldb/teams_db/specimens/views.py in <module>

    from tests.models import Test

▶ Local vars

在应用 tests 里面,我有一个叫 Test 的类,这个类引发了错误。下面是导致错误的函数(specimens.views):

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect,\
                        HttpResponseForbidden, HttpResponseBadRequest,\
                        HttpResponseServerError
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.shortcuts import render_to_response, get_object_or_404
from forms import SearchForm, SpecimenForm
from projects.models import Project, Serie
from models import Specimen 
from tests.models import Test  ## Test importation!!
import simplejson
import json
from django.core import serializers
from django.forms.models import model_to_dict
import datetime


def new_specimen(request, project_id=None, serie_id=None):
    ...

这是我在 tests.models 里的 Test 类:

from django.db import models
from projects.models import Project
from specimens.models import Specimen
#from operator.models import Operator
from django.core.validators import RegexValidator

class Test(models.Model):

    ref         = models.CharField(max_length=70, unique=True)
    #name       = models.CharField(max_length=70, null=True, blank=True, default='NULL')
    project     = models.ForeignKey(Project)
    specimen    = models.ForeignKey(Specimen)
    #operator   = models.ForeignKey(Operator)
    notes       = models.TextField(max_length=170, blank=True)
    description = models.TextField(max_length=170, blank=True)
    start_date  = models.DateField(null=True, blank=True)
    finish_date = models.DateField(null=True, blank=True)
    status      = models.CharField(max_length=70, blank=True)

你需要更多信息吗?如果有必要,请告诉我。你们觉得问题可能出在哪里?会不会是因为 tests 这个名字是个保留字??

提前谢谢大家!!

1 个回答

0

看起来确实像是一个导入循环,但我怀疑你在其他地方有没有导入过Test模型。在你的视图中不要使用相对导入,比如from models import Specimen,这可能会导致你的问题。另外,不要在tests.py里放任何模型,这个文件应该只用来做测试,你的测试不需要任何测试模型。

撰写回答