2016-09-28 2 views
3

У меня есть новый проект Python с models.py файл, который выглядит следующим образом:ImportError: Нет модуль с именем «модели» в 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, Vote в вашем admin.py

0

Я всегда использовал:

from myapp.models import ... 

, а не родственник Импортировать. Только мои личные предпочтения. Возможно, относительный импорт имеет смысл, если это admin.py для myapp, но мне все еще нравится объяснение наличия имени приложения в импорте.

Смежные вопросы