Opened 14 years ago
Closed 12 years ago
#17667 closed Bug (fixed)
App loading skips erroneous applications after first try
| Reported by: | Owned by: | Blaker0111 | |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.3 |
| Severity: | Normal | Keywords: | model |
| Cc: | anssi.kaariainen@…, Łukasz Rekucki | Triage Stage: | Accepted |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
if you guys could look through this trackback, i would really appreciate it (pasted below).
from it you can see that i can 'see' the items in the model, however, when trying to do an .order_by(), i get an ImportError BUT if i run the .order_by() command two more times, it works!?
could this be a Django bug?
the trackback is from a python console execution
my end goal is to have that working in a script file, seperate from django
(.env)user@server [~/python/scripts]# python
Python 2.6.4 (r264:75706, Nov 6 2011, 21:07:26)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.core.management import setup_environ
>>> from django.utils import simplejson
>>> import examplecom.settings
>>> setup_environ(examplecom.settings)
'/home/user/.env/lib/python2.6/site-packages/examplecom'
>>> from examplecom.main.models import Activity
>>> Activity.objects.all()
[<Activity: Test>, <Activity: Test2>]
>>> Activity.objects.order_by('-created')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 69, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 84, in __len__
self._result_cache.extend(self._iter)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 725, in execute_sql
sql, params = self.as_sql()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 60, in as_sql
ordering, ordering_group_by = self.get_ordering()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 349, in get_ordering
self.query.model._meta, default_order=asc):
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 378, in find_ordering_name
opts, alias, False)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1248, in setup_joins
field, model, direct, m2m = opts.get_field_by_name(name)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/options.py", line 307, in get_field_by_name
cache = self.init_name_map()
File "/home/user/.env/lib/python2.6/site-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 "/home/user/.env/lib/python2.6/site-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 "/home/user/.env/lib/python2.6/site-packages/django/db/models/options.py", line 428, in _fill_related_many_to_many_cache
for klass in get_models():
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 167, in get_models
self._populate()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 61, in _populate
self.load_app(app_name, True)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 76, in load_app
app_module = import_module(app_name)
File "/home/user/.env/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named main
>>> Activity.objects.order_by('-created')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 69, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 84, in __len__
self._result_cache.extend(self._iter)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 725, in execute_sql
sql, params = self.as_sql()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 60, in as_sql
ordering, ordering_group_by = self.get_ordering()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 349, in get_ordering
self.query.model._meta, default_order=asc):
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 378, in find_ordering_name
opts, alias, False)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/sql/query.py", line 1248, in setup_joins
field, model, direct, m2m = opts.get_field_by_name(name)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/options.py", line 307, in get_field_by_name
cache = self.init_name_map()
File "/home/user/.env/lib/python2.6/site-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 "/home/user/.env/lib/python2.6/site-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 "/home/user/.env/lib/python2.6/site-packages/django/db/models/options.py", line 428, in _fill_related_many_to_many_cache
for klass in get_models():
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 167, in get_models
self._populate()
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 61, in _populate
self.load_app(app_name, True)
File "/home/user/.env/lib/python2.6/site-packages/django/db/models/loading.py", line 76, in load_app
app_module = import_module(app_name)
File "/home/user/.env/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named blog
>>> Activity.objects.order_by('-created')
[<Activity: Test2>, <Activity: Test>]
Attachments (1)
Change History (5)
comment:1 by , 14 years ago
| Cc: | added |
|---|---|
| Has patch: | set |
| Summary: | Inconsistant model → App loading skips erroneous applications after first try |
| Triage Stage: | Unreviewed → Accepted |
by , 14 years ago
| Attachment: | 17667.diff added |
|---|
comment:2 by , 14 years ago
I was able to get this working just a few minutes ago. I needed to add "sys.path.append(<django project path>)" to the list of imports/etc.
I'm glad I was able to help in identifying a bug though! Thank you.
comment:3 by , 13 years ago
| Cc: | added |
|---|
comment:4 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Yes, it looks like there is a bug in Django. You should get the first error consistently, it should not go away with repeating the operation. This is an issue with app loading, not order_by.
The problem seems to be in load_app() of loading.py:
self.handled[app_name] = None self.nesting_level += 1 app_module = import_module(app_name)This causes the error to be skipped on subsequent loads. Putting the import first will fix the problem. In the attached patch this is fixed. The borg-pattern of AppCache caused some testing problems, but I hope what I did is OK.
For the reporter: you most likely have a couple of references to non-existing applications in your settings.INSTALLED_APPS. This causes the import errors for you. As said, the bug is that the errors should repeat.