Nissan911
Nissan911

Reputation: 293

syncdb doesnt create tables for my app

Hello I am trying out the django framework, and my project structure is like this

../mysite/src/mysite/models/models.py (models.py containts all defined models) ../mysite/src/mysite/ (contains the settings.py manage.py and etc)

when i run the syncdb. only django admin's tables are created. but my models in models.py are not detected.

In INSTALLED_APPS section in settings.py. i added 'mysite'.

if i change from 'mysite' ->'mysite.src' it will give an error "Error: no model named src" if i change from 'mysite' -> 'mysite.models.models' it will give 'AttributeError: 'module' object has no attribute 'path' '

can anyone help me with the syncdb?

thanks alot

Upvotes: 1

Views: 2313

Answers (6)

JoseP
JoseP

Reputation: 631

if you want to have a "models" folder containing many model definition files. You should include a file named init.py in the models folder where you should import all the models of the application

# app/models/__init__.py
# assuming you have main_models and other_models files 
from app.models.main_models import *
from app.models.other_models import *

Upvotes: 3

Thomas
Thomas

Reputation: 11888

Your ideal app structure is

ProjectDirectory/
 |- settings.py
 |- urls.py
 \- AppDirectory
     |- __init__.py
     |- views.py
     \- models.py

If you want it to work in it's current configuration (I'm assuming /src is your "project directory" in this sense and has either been added to your python path or contains manage.py) then inside the models directoy include a file called __init__.py and add the line from models import *. This will import everything and make everything in your models.py accessible by django in the place it expects it to be.

Upvotes: 1

Nissan911
Nissan911

Reputation: 293

i found where the issue is. my Models.py should be models.py.... should not start with captical M.

thanks guys for your help

Upvotes: 1

Regardless of where your actual project directory is, you need to add the models app to your INSTALLED_APPS, in python dot syntax however your models app is resolvable.

If the top level mysite is in your python path, then it would be src.mysite.models. If src is in your python path, then mysite.models.

You are supposed to add the parent folder of your django project directory (where settings.py lives) to your python path, so your apps would be referred to as project.app

Upvotes: 1

Mohammad Efazati
Mohammad Efazati

Reputation: 4920

add to your setting file

import os
import sys

ROOT_PATH = os.path.dirname(__file__)
sys.path.append(ROOT_PATH + '/src')

and then check it again

Upvotes: 0

user170386
user170386

Reputation:

Move your models.py file out from models dir and back into the mysite dir. Try again afterwards, it should now work... syncdb is reliant on the file/dir structure.

Upvotes: 3

Related Questions