Django : Unable to import model from another App

2019-01-18 04:58发布

I was hoping to seek some assistance on this problem I'm having. I'm still learning Django (and Python) and come across this particular issue that I'm unable to locate an answer for. I've created a new App called "News" and setup the Model for the App. Using the Admin interface I have created some data. From my "Pages" App, I'm trying to import the News_Article class and getting the error No module named News.models.

I am struggling to see what's going wrong here.

Any assistance would be greatly appreciated.

DIR Structure

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

news\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

Pages\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)

Error

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

2条回答
【Aperson】
2楼-- · 2019-01-18 05:36

Switch

from News.models import News_Article

to

from Bolton_GC.News.models import News_Article
查看更多
狗以群分
3楼-- · 2019-01-18 05:41

Just to elaborate on @TheLifeOfSteve's answer, all the import statements are always relative to your manage.py file.

If the manage.py file was at the path Bolton_GC/Bolton_GC, then the correct import statement would just be:

from News.models import News_Article

But in the current directory structure, the following is the correct answer as pointed out by Steve.

from Bolton_GC.News.models import News_Article
查看更多
登录 后发表回答