Почему фильтрация данных в Django нарушает мой код? - PullRequest
0 голосов
/ 18 марта 2011

У меня довольно странная проблема, которая вызвана следующей строкой кода:

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

Я подумал, что это может быть связано с самой моделью, поэтому я попытался перейти с моделей.BooleanField () на models.CharField () - это не имеет значения.

Вот запись models.py из приложения tweetgrab:

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 - то же самое происходит с обоими.

1 Ответ

1 голос
/ 18 марта 2011

По какой-то причине у django возникают проблемы с импортом tweetgrab.

Я бы предложил 2 вещи (при условии, что tweetgrab - это приложение внутри вашего проекта):

  1. Убедитесь, что родительский каталог вашего проекта находится в вашем пути python.
  2. Начните импортировать приложения / установите их в INSTALLED_APPS как myproject.app.Таким образом, вы не столкнетесь со странными проблемами, когда import local_file работает, но не выходит за пределы этой области.

В дополнение к этому, я настоятельно рекомендую придерживаться соглашения об именовании имен классов с заглавной буквыпоскольку это поможет другим и вам самим с первого взгляда отличить классы от функций.

...