2016-09-28 194 views
3

我有一个新的Python项目,与models.py文件看起来像这样:导入错误:没有模块在Python命名为“模型” 3

from django.db import models 
from django.contrib.auth.models import User 
from django.core.validators import MinValueValidator, MaxValueValidator 

class Metric(models.Model): 
    users = models.ManyToManyField(User, through = 'Vote') 
    name = models.CharField(max_length = 255) 

class Vote(models.Model): 
    metric = models.ForeignKey(Metric, on_delete = models.CASCADE) 
    user = models.ForeignKey(User, on_delete = models.CASCADE) 
    rating = models.IntegerField(validators = [MinValueValidator(0), MaxValueValidator(10)]) 
    email = models.EmailField 

    def __str__(self): 
    return str(self.rating) 

和admin.py文件是这样的:

from django.contrib import admin 
from models import Metric, Vote 

admin.site.register(Metric) 
admin.site.register(Vote) 

在Python 2.7.5中运行此应用程序时,启动应用程序工作正常。当我尝试运行使用Python 3.5.1,我得到错误ImportError: No module named 'models',这个回溯:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x103bd2b70> 
Traceback (most recent call last): 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 113, in inner_run 
    autoreload.raise_last_exception() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception 
    six.reraise(*_exception) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/apps/registry.py", line 115, in populate 
    app_config.ready() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/contrib/admin/apps.py", line 23, in ready 
    self.module.autodiscover() 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/contrib/admin/__init__.py", line 26, in autodiscover 
    autodiscover_modules('admin', register_to=site) 
    File "/Users/sashacooper/pyenv/lib/python3.5/site-packages/django/utils/module_loading.py", line 50, in autodiscover_modules 
    import_module('%s.%s' % (app_config.name, module_to_search)) 
    File "/Users/sashacooper/pyenv/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/Users/sashacooper/Desktop/pogroms/crockerometer2/crockerometer/admin.py", line 2, in <module> 
    from models import Metric, Vote 

我试着加入from __future__ import absolute_import每类似名称的堆栈溢出职位admin.py文件的开始但它并没有改变错误。是什么造成的?

+0

你尝试从你的manage.py文件开始传递完整路径吗? – sebb

回答

7

在Python 3,您必须在您使用相对进口告诉它:

from .models import ... 
2

尝试from .models import Metric, Voteadmin.py

0

我一直使用:

from myapp.models import ... 

而不是相对进口。只是我个人的喜好。也许相对导入更有意义,如果它是admin.py对于myapp,但我仍然喜欢在导入中具有应用程序名称的明确性。

相关问题