Django不为新的app模型创建新的sqlite表

时间:2018-02-20 11:12:23

标签: python django

对于Django来说很新,我遇到了一个新模型的问题(以及我制作的新应用'博客')。配置模型和makemigration后,表blog_post不存在。

这是我所做的所有过程。我正在关注官方教程:

这是我的博客/ models.py:

from django.db import models

    class Post(models.Model):
        title = models.CharField(max_length=80)
        text = models.TextField()
        author = models.ForeignKey('auth.User', on_delete= models.CASCADE)
        created_date = models.DateTimeField()
        pub_date = models.DateTimeField()

    def publish():
        self.pub_date = timezone.now()
        self.save()

的mysite / settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',
]

第一次

之后
  

python manage.py makemigrations blog

Migrations for 'blog':
blog\migrations\0001_initial.py
- Create model Post
  

python manage.py sqlmigrate blog 0001

BEGIN;
--
-- Create model Post
--
CREATE TABLE "blog_post" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,     "title" varchar(80) NOT NULL, "text" text NOT NULL, "created_date" datetime NOT NULL, "pub_date" datetime NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "blog_post_author_id_dd7a8485" ON "blog_post" ("author_id");
COMMIT;
  

python manage.py migrate

Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
No migrations to apply.

所以,在这里。似乎没有创建新表。我检查了一个SqLite实用程序,并且没有这样的表:blog_post 我也用django shell检查。

我加倍(三重)检查过程:

  1. 更改模型(在models.py中)。
  2. 运行python manage.py makemigrations以创建这些更改的迁移
  3. 运行python manage.py migrate以将这些更改应用于数据库
  4. 但我仍然坚持这一点。谁能告诉我我错过了什么?谢谢!

    这是我的数据库设置:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
      

    python manage.py showmigrations

    admin
     [X] 0001_initial
     [X] 0002_logentry_remove_auto_add
    auth
     [X] 0001_initial
     [X] 0002_alter_permission_name_max_length
     [X] 0003_alter_user_email_max_length
     [X] 0004_alter_user_username_opts
     [X] 0005_alter_user_last_login_null
     [X] 0006_require_contenttypes_0002
     [X] 0007_alter_validators_add_error_messages
     [X] 0008_alter_user_username_max_length
     [X] 0009_alter_user_last_name_max_length
    blog
     [X] 0001_initial
    contenttypes
     [X] 0001_initial
     [X] 0002_remove_content_type_name
    sessions
     [X] 0001_initial
    

    我检查是否存在DB Browser for SQLite的表,但是blog_post不存在。

    链接到github回购:https://github.com/mothinx/juliengracia

3 个答案:

答案 0 :(得分:0)

showmigrations的输出显示Django认为最初的博客迁移已经开始。

blog
 [X] 0001_initial

sqlmigrate输出显示迁移应该已创建表。因此,看起来好像django_migrations文件夹和数据库不同步。

您可以尝试通过伪造回零迁移来重新运行初始迁移。

python manage.py migrate --fake blog zero
python manage.py migrate blog

如果这不起作用,并且您在数据库中没有任何重要数据,则可以删除db.sqlite3文件并再次运行python manage.py migrate

答案 1 :(得分:0)

python manage.py migrate --fake APPNAME zero

然后您可以运行迁移脚本

python manage.py migrate 

希望这会有所帮助!

答案 2 :(得分:-1)

我只使用以下内容:

python manage.py makemigrations
python manage.py migrate