【问题标题】:Why does filtering data in Django break my code?为什么在 Django 中过滤数据会破坏我的代码?
【发布时间】:2011-07-17 19:13:33
【问题描述】:

我遇到了一个相当奇怪的问题——这是由以下代码行引起的:

userlist = twitter_user.objects.filter(enabled=True)

如果我注释掉这一行,代码可以正常工作,但是当取消注释时,我会收到以下错误消息:

Traceback (most recent call last):
  File "script.py", line 33, in <module>
    userlist = twitter_user.objects.filter(enabled=True) ###This is the line that causes the trouble.
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/manager.py", line 141, in filter
    return self.get_query_set().filter(*args, **kwargs)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/query.py", line 561, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/query.py", line 579, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1170, in add_q
    can_reuse=used_aliases, force_having=force_having)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1058, in add_filter
    negate=negate, process_extras=process_extras)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1225, in setup_joins
    field, model, direct, m2m = opts.get_field_by_name(name)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/options.py", line 296, in get_field_by_name
    cache = self.init_name_map()
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/options.py", line 326, in init_name_map
    for f, model in self.get_all_related_m2m_objects_with_model():
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/options.py", line 401, in get_all_related_m2m_objects_with_model
    cache = self._fill_related_many_to_many_cache()
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/options.py", line 415, in _fill_related_many_to_many_cache
    for klass in get_models():
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/loading.py", line 167, in get_models
    self._populate()
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/loading.py", line 61, in _populate
    self.load_app(app_name, True)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/db/models/loading.py", line 76, in load_app
    app_module = import_module(app_name)
  File "/home/beano/projects/bikernod.com/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
ImportError: No module named tweetgrab

我认为这可能与模型本身有关,所以我尝试从 models.BooleanField() 更改为 models.CharField() - 这没有区别。

这是来自 tweetgrab 应用程序的 models.py 条目:

from django.db import models

class twitter_user(models.Model):
    username = models.CharField(max_length=30)
    enabled = models.BooleanField()

    def __unicode__(self):
        return self.username

据我所知(我对 Django/Python 很陌生),我最初声明的代码行导致找不到应用程序。

我还确保它包含在 settings.py 文件中 - 在已安装的应用程序中,如下所示:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'tweetgrab',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
     'django.contrib.admindocs',
)

知道这里发生了什么,我也用 MySQL 和 Sqlite 尝试过 - 两者都会发生同样的事情。

【问题讨论】:

  • tweetgrab 不在你的 python 路径上

标签: python django django-models models


【解决方案1】:

无论出于何种原因,django 在导入 tweetgrab 时遇到问题。

我会建议 2 件事(假设 tweetgrab 是您项目中的一个应用程序):

  1. 确保项目的父目录位于 python 路径中。
  2. 开始导入应用程序/在INSTALLED_APPS 中将它们设置为myproject.app。这样您就不会遇到 import local_file 有效但不在该范围之外的奇怪问题。

附带说明,我强烈建议遵循类名大写的命名约定,因为这将有助于其他人和你自己一眼区分什么是类和函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    相关资源
    最近更新 更多