Django: невозможно импортировать модель из другого приложения

Я надеялся получить помощь по этой проблеме, которая у меня возникла. Я все еще изучаю Django (и Python) и сталкиваюсь с этой конкретной проблемой, на которую я не могу найти ответ. Я создал новое приложение под названием "Новости" и настроил модель для приложения. Используя интерфейс администратора, я создал некоторые данные. Из моего приложения "Страницы" я пытаюсь импортировать News_Article класс и получение ошибки Нет имени модуля News.models,

Я изо всех сил пытаюсь понять, что здесь происходит не так.

Будем очень благодарны любой помощи.

Структура DIR

Bolton_GC [Folder]
- Bolton_GC [Folder]
  - News [Folder]
    - Migrations [Folder]
    - __init__.py
    - __init__.pyc
    - admin.py
    - admin.pyc
    - models.py
    - models.pyc
    - tests.py
    - views.py
  - Pages [Folder]
    - Migrations [Folder]
    - __init__.py
    - __init__.pyc
    - admin.py
    - admin.pyc
    - models.py
    - models.pyc
    - tests.py
    - views.py
    - views.pyc
  - static [Folder]
  - templates [Folder]
  - __init__.py
  - __init__.pyc
  - settings.py
  - settings.pyc
  - urls.py
  - urls.pyc
  - wsgi.py
  - wsgi.pyc
- db.sqlite3
- manage.py

Новости \model.py

from django.db import models
from datetime import datetime

class News_Article(models.Model):
    class Meta:
        ordering = ['news_datetime_submitted']
    news_title = models.CharField(max_length=75, verbose_name="News Title")
    news_text = models.CharField(max_length=300, verbose_name="News Text")
    news_active = models.BooleanField(default=True, verbose_name="News Active")
    news_datetime_submitted = models.DateTimeField(default=datetime.now(), verbose_name="News Date")

    def __str__(self):
        return self.news_title

Страницы \views.py

from django.shortcuts import HttpResponse, get_object_or_404, render
from models import Page, Announcement, Menu, Sub_Menu
from django.core.exceptions import ObjectDoesNotExist
from News.models import News_Article
import pdb

# Helper Functions

def get_announcement():
    try:
        return Announcement.objects.get(announcement_active=True)
    except ObjectDoesNotExist:
        return None

def clean_url(dirtyurl, badlist):
    for item in badlist:
        dirtyurl = dirtyurl.replace(item,'')
    return dirtyurl[1:-1]

# View functions

def page(request):
    rDict = {}
    path = clean_url(request.path, ['"', "'"])
#    pdb.set_trace()
    p = get_object_or_404(Page, urlconf_text=path)
    rDict['p'] = p
    announcement = get_announcement()
    if not announcement == None:
        rDict['announcement'] = announcement
    rDict['sitenav'] = path
    rDict['menu'] = Menu.objects.all().order_by('menu_position')
    return render(request, 'en/public/page.html', rDict)

ошибка

ImportError at /home/

No module named News.models

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

No module named News.models

Exception Location:     C:\Me\Websites\Bolton_GC\Bolton_GC\Pages\views.py in <module>, line 4
Python Executable:  c:\python27\python.exe
Python Version:     2.7.9
Python Path:    

['C:\\Me\\Websites\\Bolton_GC',
 'c:\\python27\\lib\\site-packages\\setuptools-18.0.1-py2.7.egg',
 'C:\\WINDOWS\\SYSTEM32\\python27.zip',
 'c:\\python27\\DLLs',
 'c:\\python27\\lib',
 'c:\\python27\\lib\\plat-win',
 'c:\\python27\\lib\\lib-tk',
 'c:\\python27',
 'c:\\python27\\lib\\site-packages']

Server time:    Tue, 14 Jul 2015 13:21:14 +0100

6 ответов

Решение

Переключатель

from News.models import News_Article

в

from Bolton_GC.News.models import News_Article

Просто чтобы уточнить ответ @TheLifeOfSteve, все операторы импорта всегда относятся к вашему файлу manage.py.

Если файл manage.py находится по пути Bolton_GC/Bolton_GC, тогда правильный оператор импорта будет выглядеть так:

from News.models import News_Article

Но в текущей структуре каталогов следующий ответ является правильным, как указал Стив.

from Bolton_GC.News.models import News_Article

Есть обновление в разделе Импорт и регистрация моделей !! Пожалуйста, попробуйте из .models import News_Article

Была такая же проблема, но для меня это оказалось столкновением имен. Я назвал свое приложение так же, как другой модуль в пути. Я изменил название приложения, и это решило проблему.

Я использовал имя приложения вместе с .models, за которым следовало имя модели, отлично работало для меня

ваш пример:from News.models import News_Article

попробуйте из .models import News_Article

Другие вопросы по тегам