2011-05-29 79 views
1

我有模型,它代表了我的系統設置和我用它從我的應用程序的另一部分,使進口有3個級別WORKING CODE <- Module <- ModelDjango的:Model.objects.get失敗ImportError異常

型號Variables

 


from django.db import models 

class Variables(models.Model): 
    key = models.CharField(max_length = 20, verbose_name = 'Variable') 
    value = models.CharField(max_length = 1024) 

    class Meta: 
     app_label = 'core' 

    def __unicode__(self): 
     return '%s: %s' % (self.key, self.value,) 
 

這裏是我使用它的代碼

模塊variables.py

 


from core.models.storage import Variables 

def get_var(name): 
    return Variables.objects.get(key = name) 
 

模塊config.py

 


    var = get_var('some_key') 
 

當我使用從Django的這個東西殼一切正常,但是當我打電話get_var功能我已經ImportError例外

​​

 


from django.db import models 

class Variables(models.Model): 
    key = models.CharField(max_length = 20, verbose_name = 'Variable') 
    value = models.CharField(max_length = 1024) 

    class Meta: 
     app_label = 'core' 

    def __unicode__(self): 
     return '%s: %s' % (self.key, self.value,) 
 
 


    File "monitor_cli.py", line 19, in 
    print worker.get_provider() 
    File "/home/sultan/Project/monitor/app/worker.py", line 14, in get_provider 
    print Variables.objects.get(pk=1) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 132, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 341, in get 
    clone = self.filter(*args, **kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 550, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 568, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1172, in add_q 
    can_reuse=used_aliases, force_having=force_having) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1060, in add_filter 
    negate=negate, process_extras=process_extras) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 1226, in setup_joins 
    field, model, direct, m2m = opts.get_field_by_name(name) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 307, in get_field_by_name 
    cache = self.init_name_map() 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 337, in init_name_map 
    for f, model in self.get_all_related_m2m_objects_with_model(): 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 414, in get_all_related_m2m_objects_with_model 
    cache = self._fill_related_many_to_many_cache() 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 428, in _fill_related_many_to_many_cache 
    for klass in get_models(): 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 167, in get_models 
    self._populate() 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 61, in _populate 
    self.load_app(app_name, True) 
    File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 76, in load_app 
    app_module = import_module(app_name) 
    File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named c 
 
+0

您可以發佈您的models.py文件的完整?這可能與文件的另一部分有關。試着從'core.models import *'做'看看會發生什麼。 – 2011-05-29 08:21:49

+0

掛上。你有一個帶有文件的模型目錄嗎?是否有一個原因,你沒有一個models.py文件,其中定義的所有模型? – 2011-05-29 08:38:55

+0

@Josh Smeaton yes模型目錄與模型文件 – sultan 2011-05-29 09:08:55

回答

0

獲取擺脫模型目錄,並把你所有models.py文件中的r模型,除非你有很好的理由不這樣做。將您的進口更改爲from core.models import Variable(將Variables類重命名爲Variable - 應將django模型命名爲單數而非複數)。

該問題可能與您的模型存在於除models以外的命名空間有關;即。 models.storage。 django基礎設施預計某些地方會出現某些情況。如果您打算將模型放入單獨的名稱空間中,則應該從models模塊中的__init__.py文件導入它們。除非你有很好的理由,否則不要再這樣做。

最後,在提問這種性質的問題時,應該提供更多的信息。你應該顯示所有相關文件的代碼。你應該提供你已經完成的與django慣例不同的細節(在這種情況下,是模型目錄而不是models.py文件)。您還應該顯示settings.py的相關設置,在這種情況下,您的設置爲INSTALLED_APPS。你也應該告訴我們你使用的是什麼版本的django和python;這有時是相關的。預先獲得更多信息遠比信息更少。

+0

如果我有十個模型是什麼問題,例如20,我需要用單獨的文件分開它們嗎? – sultan 2011-05-31 09:54:23

+0

我擁有models.py中的所有模型。我得到相同的錯誤(爲.all()工作,但.get(pk = 1))失敗。 – 2011-05-31 09:09:45

+0

@sultan,你不需要將它們分成多個文件。爲了組織目的,你可能想。首先理解這樣做的後果,而不是一味地去做。檢查django源代碼示例(並查看模型目錄中的__init __。py'文件)。既然您已將所有模型放在一個文件中,請刪除問題中以前的代碼示例,併發布models.py和INSTALLED_APPS設置的內容。 – 2011-06-01 00:41:04