我正在遵循一个django博客教程。当我使用 python manage.py shell
并尝试在 shell 中执行以下命令时
from mainsite.models import Category, Tag
c = Category(name='category test')
c.save()
发生此错误:
sqlite3.OperationalError: no such table: mainsite_category
这是我mainsite
文件夹中的 model.py,我认为是正确的:
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
我已经尝试过manage.py makemigrations
,manage.py migrate
并且可以成功地使用manage.py runserver
来查看网站。那么这里出了什么问题呢?
编辑:这是我在settings.py
安装的应用程序
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mainsite',
]
和我的项目结构
|____djangoBlog
| |______init__.py
| |____settings.py
| |____urls.py
| |____wsgi.py
|____mainsite
| |______init__.py
| |____admin.py
| |____apps.py
| |____models.py
| |____tests.py
| |____urls.py
| |____views.py
|____manage.py
|____README.md
|____requirements.txt
|____templates
| |____blog
| | |____index.html
编辑:当我运行python manage.py makemigrations
和python manage.py migrate
时,输出如下:
No changes detected
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
UPD:
由于您的项目结构mainsite
应用程序中缺少migrations
文件夹,这意味着您尚未为该应用程序创建迁移。 运行python manage.py makemigrations mainsite
,然后python manage.py migrate
。
从文档中:
若要将迁移添加到没有
migrations
目录的应用,请使用应用的app_label
运行makemigrations
。
是的,您可以通过简单的实例创建来创建模型。从文档创建对象。
原答案:
您需要确保已将'mainsite'
应用包含在 settings.py INSTALLED_APPS
中,然后运行迁移。之后,您应该能够执行以下操作:
c = Category.objects.create(name='category test')
c.save()
@Owen,根据vishes_shell的回答,你必须做:
python manage.py makemigrations mainsite
第一次为了生成将包含迁移的文件夹迁移,那么您可以只做
python manage.py makemigrations
将来,如果您添加新应用程序,请不要忘记在使用第二个命令之前再次发出第一个命令(按应用程序名称更改"主站点"(。
在您的models.py
中,您需要在name
处缩进:
class Category(models.Model):
name = models.CharField(max_length=100)