繁体   English   中英

Django:Model.objects.get 因 ImportError 异常而失败

[英]Django: Model.objects.get fails with ImportError exception

我有 model 代表系统中的设置,我从应用程序的另一部分使用它,以便导入有 3 个级别WORKING CODE <- Module <- Model

Model 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 shell 中的这些东西时,一切正常,但是当我调用get_var function 时,我有ImportError异常

storage.py



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

摆脱模型目录,并将所有模型放在 models.py 文件中,除非你有很好的理由不这样做。 将导入更改为from core.models import Variable (将Variables class 重命名为Variable - django 模型应命名为单数而不是复数)。

问题可能与您的模型存在于models以外的命名空间中这一事实有关; IE。 models.storage .存储。 django 基础设施期望某些东西在某些地方。 如果您打算将模型放在单独的命名空间中,就像您正在做的那样,您应该从models模块中的__init__.py文件中导入它们。 不要再这样做了,除非你有充分的理由。

最后,在提出这种性质的问题时,您应该提供更多信息。 您应该显示所有相关文件的代码。 您应该提供您所做的偏离 django 约定的详细信息(在这种情况下,是模型目录而不是 models.py 文件)。 您还应该显示来自settings.py的相关设置,在这种情况下,您的INSTALLED_APPS设置。 您还应该告诉我们您使用的是哪个版本的 django 和 python; 这有时是相关的。 预先提供更多信息比减少信息要好得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM