问题
I have a Django project on a Centos VPS.
I created some models and debugged them so they validate and give no errors. I have them in a "models" folder in my myapp and have added each model to the init file in this directory, for example:
from category import Category
I added the app to settings.py INSTALLED_APPS
and ran:
Python manage.py syncdb
It appeared to work fine and added all tables apart from the ones for my app.
I then installed South and added that to INSTALLED_APPS
and, tried syncdb again and ran:
Python manage.py schemamigration myapp --initial
It generated the file correctly but nothing was in it (none of the tables my models).
An example file in "models" folder (usertype.py)
from django.db import models
class UserType(models.Model):
usertype_id = models.PositiveIntegerField(primary_key=True)
description = models.CharField(max_length=100)
is_admin = models.BooleanField()
is_moderator = models.BooleanField()
class Meta:
app_label = 'myapp'
Any ideas what could be going wrong here and why I can't get anything to detect my models?
回答1:
Run the following commands
python manage.py makemigrations yourappname
python manage.py migrate
Note it works on django 1.7 version for me.
回答2:
you're misunderstanding the process of working with south. South isn't just another application, it's a managing tool. Your app needs to be a South application from the begining or converted to one. That being said, the process is like so:
- Add South to INSTALLED_APPS
- run syncdb for the first time
- Add your app to INSTALLED_APPS*
run the south initialization command:
python manage.py schemamigration myapp --initial
migrate:
python manage.py migrate
If you want to convert a project:
- Run syncdb after adding south
run:
manage.py convert_to_south myapp
And use south from now on to manage your migrations.
*p.s. - you can add both south and your own app at the same time, if you keep in mind to put south before your own apps. That's because django reads INSTALLED_APPS in order - it runs syncdb on all apps, but after installing south it won't install the rest and instead tell you to use the south commands to handle those
edit
I misled you. Since you put so much emphasis on the south thing I didn't realize the problem was you were trying to use models as a directory module instead of a normal file. This is a recognized problem in django, and the workaround is actually exactly as you though in the first place:
say this is your structure:
project/
myapp/
models/
__init__.py
bar.py
you need bar.py
to look like this:
from django.db import models
class Foo(models.Model):
# fields...
class Meta:
app_label = 'myapp' #you need this!
and __init__.py
needs to look like this:
from bar import Foo
Make sure it looks like this and it will work.
UPDATE 18/08/2014
The ticket has changed to wontfix, because apparently the bigger issue with the app_label has been fixed. Huzza!
来源:https://stackoverflow.com/questions/21309371/django-not-creating-db-tables-for-models-neither-with-syncdb-nor-south