Opened 16 years ago
Closed 16 years ago
#8747 closed (fixed)
Importing models from within `__init__.py` prevents syncdb from creating tables
Reported by: | Julien Phalip | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have a very simple app with this structure:
myapp/ __init__.py models.py
That app wouldn't create its tables when running syncdb
. After poking around I realised that it was because within the __init__.py
I was importing the models:
# __init__.py from models import * ...
So, my question: is that a case of "don't do that", and if so is that worth specifying in the documentation?
It took me quite a while to debug that, and I found nothing obvious in the docs to help me (if there is, please point me to it).
Change History (6)
comment:1 by , 16 years ago
comment:2 by , 16 years ago
Component: | Uncategorized → Database layer (models, ORM) |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:3 by , 16 years ago
I had probably the same problem, but less clear. I also imported models from the application's __init__.py
, but the problem appeared only when I added another class definition (not a Model). I used manage.py testserver
. It seemed that the whole application didn't get "activated" (also fixtures were not loaded) when this additional class definition was there. But no error message, not even when using -v 2
. Also no error when importing these modules from a shell.
It stopped when I moved the additional code to another module and not importing it in __init__.py
comment:4 by , 16 years ago
I can reproduce this with 1.0 but not with a recent trunk checkout (rev 10688).
comment:6 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Apparently the patch from the past fixed this. r10088
I could add that this is correct Pythonically and generates no exception. It's just that
syncdb
won't create the tables. If it's by design, then some clue should be given in the code or doc to help debug that.