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