2012-05-31 68 views
4

我跟隨此link在我的獨立應用程序在Python中使用Django的ORM。 manage.py sql'application_name'和manage.py syncdb運行良好,並且在執行syncdb時創建了表。我遇到的問題是當我運行實際的腳本(對於這種情況,它是dparser.py),它將處理數據庫事務,我遇到「TypeError:相對導入需要'包'參數」。下面是堆棧跟蹤:Django ORM獨立應用程序

Traceback (most recent call last): 
    File "dparser.py", line 23, in <module> 
    from dmodel.models import * 
    File "/home/<user>/d/dapp/dmodel/models.py", line 1, in <module> 
    from django.db import models 
    File "/usr/local/lib/python2.7/site-packages/django/db/__init__.py", line 11, in <module> 
    if DEFAULT_DB_ALIAS not in settings.DATABASES: 
    File "/usr/local/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner 
    self._setup() 
    File "/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 93, in __init__ 
    mod = importlib.import_module(self.SETTINGS_MODULE) 
    File "/usr/local/lib/python2.7/site-packages/django/utils/importlib.py", line 28, in import_module 
    raise TypeError("relative imports require the 'package' argument") 
TypeError: relative imports require the 'package' argument 

下面是我的settings.py,models.py和dparser.py的內容:

settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'd', 
     'USER': 'root', 
     'PASSWORD': '<password>', 
     'HOST': 'localhost', 
     'PORT': '3306', 
    } 
} 
INSTALLED_APPS = ("dapp.dmodel",) 

models.py:

from django.db import models 
from django.db.models import Max 


class Topics(models.Model): 
    topic_id = models.AutoField(primary_key=True) 
    topic = models.CharField(max_length=1000) 

class Links(models.Model): 
    link_id = models.AutoField(primary_key=True) 
    topic = models.ForeignKey(Topics) 
    link = models.CharField(max_length=1000) 

def getLastId(tag): 
    ... 
    return lastid 

dparser.py(部分):

from django.conf import settings 
os.environ['DJANGO_SETTINGS_MODULE'] = ".settings.py" 
DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'd', 
     'USER': 'root', 
     'PASSWORD': '<password>', 
     'HOST': 'localhost', 
     'PORT': '3306', 
    } 
} 
INSTALLED_APPS = ("dapp.dmodel",) 

from dmodel.models import * # --> This is were the exception occurs 

希望有人能幫助我在這裏。提前致謝!

+0

我不認爲你需要的行「從django.db.models導入最大」 – aglassman

+0

我需要,因爲我在models.py – jaysonpryde

+1

的getLastId函數上使用它,我會建議使用SQLAlchemy獨立的應用程序,而不是。這是Web框架不可知論者。 – Keith

回答

8

望着在execption提高你看到你的設置文件名是導致該問題的django.utils.importlib.py代碼:

if name.startswith('.'): 
    if not package: 
     raise TypeError("relative imports require the 'package' argument") 

不要使用.settings.py的名稱爲您設置文件,使用的東西不以'。'開始它會解決這個特定的錯誤。

+0

感謝Bernhard ......現在正在工作:) – jaysonpryde

+0

這也可能發生在'ROOT_URLCONF'設置中。如果你正在使用類似'ROOT_URLCONF = os.path.basename(PATH)+'.urls''的東西,你可能會得到類似''..urls''的東西,這會引發錯誤。通過Django源代碼來找出那個問題! – pyrospade

0

我猜你需要做的

from dapp.dmodel.models import * 

或設置PYTHONPATHsys.path以包括DAPP文件夾。

+0

什麼是mdmode bernhard? – jaysonpryde

+0

對不起,是一個錯字。現在糾正了。 – Bernhard

+0

仍然無法正常工作...感謝您的建議,但:) – jaysonpryde