2016-09-22 87 views
0

我正在嘗試爲csv文件編寫導入程序。下面是一個小例子,錯誤:django.core.exceptions.AppRegistryNotReady:模型尚未加載

csv_filepathname="/home/thomas/Downloads/zip.csv" 
your_djangoproject_home="~/Desktop/Projects/myproject/myproject/" 

import sys,os,csv 

sys.path.append(your_djangoproject_home) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

from django.db.models.fields.related import ManyToManyField 
from myapp.models import ZipCode,state 


dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"') 




def import_SO(item, crit,val): 

    debug = 1; 

    obj_state=type(item).objects.filter(crit=val) 
    <...some other stuff...> 
    return 



for row in dataReader: 

    st=state(statecode=row[2],statename=row[3]) 

    import_SO(st,"statename",row[3]) 

這裏是我的模型

class state(models.Model): 
    statecode = models.CharField(max_length=2, default='XX') 
    statename = models.CharField(max_length=32, default='XXXXXXXXXXXXX') 

當我執行的代碼喜歡它,然後我得到了以下錯誤:

File "load_data.py", line 101, in <module> 
    import_SO(st,"statename",row[3]) # Objekt, Kriterium, zu vergleichender Wert 
    File "load_data.py", line 68, in import_SO 
    obj_state=type(item).objects.filter(crit=val)#crit=val) # suche object mit merkmal, hier statename 
    File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 127, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 679, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 697, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1310, in add_q 
    clause, require_inner = self._add_q(where_part, self.used_aliases) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1338, in _add_q 
    allow_joins=allow_joins, split_subq=split_subq, 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1150, in build_filter 
    lookups, parts, reffed_expression = self.solve_lookup_type(arg) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1036, in solve_lookup_type 
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta()) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1394, in names_to_path 
    field_names = list(get_field_names_from_opts(opts)) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 45, in get_field_names_from_opts 
    for f in opts.get_fields() 
    File "/usr/lib/python2.7/dist-packages/django/db/models/options.py", line 740, in get_fields 
    return self._get_fields(include_parents=include_parents, include_hidden=include_hidden) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/options.py", line 802, in _get_fields 
    all_fields = self._relation_tree 
    File "/usr/lib/python2.7/dist-packages/django/utils/functional.py", line 59, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/usr/lib/python2.7/dist-packages/django/db/models/options.py", line 709, in _relation_tree 
    return self._populate_directed_relation_graph() 
    File "/usr/lib/python2.7/dist-packages/django/db/models/options.py", line 681, in _populate_directed_relation_graph 
    all_models = self.apps.get_models(include_auto_created=True) 
    File "/usr/lib/python2.7/dist-packages/django/utils/lru_cache.py", line 101, in wrapper 
    result = user_function(*args, **kwds) 
    File "/usr/lib/python2.7/dist-packages/django/apps/registry.py", line 168, in get_models 
    self.check_models_ready() 
    File "/usr/lib/python2.7/dist-packages/django/apps/registry.py", line 131, in check_models_ready 
    raise AppRegistryNotReady("Models aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 

但是,當我將行「obj_state = type(item).objects.filter(crit = val)」改爲「obj_state = type(item).objects.filter(statename = val)」 然後一切正常。所以在這個例子中,「statename」似乎代表了searchtriteria的變量「crit」。所以我想通過參數傳遞給方法「import_SO」,但由於某種原因它不起作用。

當我在錯誤發生之前打印變量crit時,變量的內容似乎是正確的。

任何想法?

更新:

Traceback (most recent call last): 
    File "load_data.py", line 11, in <module> 
    django.setup() 
    File "/usr/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/usr/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate 
    app_config = AppConfig.create(entry) 
    File "/usr/lib/python2.7/dist-packages/django/apps/config.py", line 112, in create 
    mod = import_module(mod_path) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
ImportError: No module named myproject 

UPDATE: 我安裝的應用程序: 添加 your_djangoproject_home="~/Desktop/Projects/myprojectos.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

我的代碼,我得到以下錯誤後

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'myproject.myapp' 
) 
+0

http://stackoverflow.com/documentation/django/5848/django-from-the-command-line/20596/django-from-the-command-line#t=201609221231588765522你必須做django.setup() – e4c5

+0

'filter(crit = val)'會過濾字段名'crit',而不是變量'crit'。如果你想使用變量'crit',那麼你需要做一些類似'filter(** {crit:val})'的事情。 – Alasdair

+0

現在工作。謝謝! – Helyx

回答

1

您需要在使用ORM之前,請在腳本中調用django.setup()訪問數據。

import django 

sys.path.append(your_djangoproject_home) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

django.setup() 

查看the docs瞭解更多信息。

+0

這給了我這個錯誤:ImportError:沒有名爲myproject的模塊。我的appfolder和settings.py,urls.py等的路徑是「〜/ Desktop/Projects/myproject/myproject /」 – Helyx

+0

這是一個單獨的問題。請用完整的回溯更新您的問題。將代碼更改爲'your_djangoproject_home =「〜/ Desktop/Projects/myproject」和'os.environ ['DJANGO_SETTINGS_MODULE'] ='myproject.settings''可能會解決問題。 – Alasdair

+0

已更新。它沒有解決問題 – Helyx

相關問題