2010-11-29 102 views

回答

92

如果你想獲得一個對象,使用get()更爲直接:

obj = Class.objects.get(pk=this_object_id) 
+9

僅供參考,`pk`是引用任何模型主鍵的首選方式。只有在模型作者沒有明確指定主鍵的情況下才會生成「id」字段。如果作者*確實指定了一個不是`id`的主鍵字段,那麼就不會有'id`字段。 – 2010-11-29 04:18:39

9

我來到這裏了同樣的問題,但出於不同的原因:

Class.objects.get(id=1) 

此代碼是提高一個ImportError異常。什麼是困惑我的是,下面的代碼執行罰款和返回的結果集料:追溯爲get()方法

Class.objects.all() 

尾巴:

File "django/db/models/loading.py", line 197, in get_models 
    self._populate() 
File "django/db/models/loading.py", line 72, in _populate 
    self.load_app(app_name, True) 
File "django/db/models/loading.py", line 94, in load_app 
    app_module = import_module(app_name) 
File "django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named myapp 

閱讀Django的loading.py裏面的代碼,我得出的結論是我的settings.py對我的應用程序有不好的路徑,其中包含我的Class模型定義。我所要做的只是正確的應用程序的路徑和get()方法執行良好。

這是我settings.py與該修正的路徑:

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    # ... 
    'mywebproject.myapp', 

所有的混亂,是因爲我使用的Django的ORM作爲一個獨立的引起的,所以命名空間必須反映這一點。