Django: sqlite3.OperationalError: нет такой таблицы в оболочке python

76
5

Я следую учебнику блога django. Когда я использовал python manage.py shell и пробовал следующие команды в оболочке

from mainsite.models import Category, Tag
c = Category(name='category test')
c.save()

эта ошибка возникла:

sqlite3.OperationalError: no such table: mainsite_category

Это моя model.py в папке mainsite, которая, на мой взгляд, верна:

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 для просмотра веб-сайта. Так что тут не так?

Изменение: это мой INSTALLED APP в 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

Edit: Когда я запускаю 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.

спросил(а) 2021-01-25T18:43:27+03:00 4 месяца, 4 недели назад
1
Решение
63

UPD:

Поскольку в структуре вашего проекта отсутствует папка migrations в приложении для mainsite, это означает, что вы не создали миграции для этого приложения. Запустите python manage.py makemigrations mainsite а затем python manage.py migrate.

Из документов:

Чтобы добавить миграции в приложение, не имеющее каталог migrations, запустите makemigrations с приложениями app_label.

И да, вы можете создать модель с простым созданием экземпляра. Из документов Создание объектов.

Оригинальный ответ:

Вы должны быть уверены, что вы включили приложение 'mainsite' в INSTALLED_APPS в settings.py, а затем выполните миграцию. После этого вы сможете сделать следующее:

c = Category.objects.create(name='category test')
c.save()

ответил(а) 2021-01-25T18:43:27+03:00 4 месяца, 4 недели назад
45

Кажется, что в ваших models.py вам нужно отступы по name:

class Category(models.Model):
name = models.CharField(max_length=100)

ответил(а) 2021-01-25T18:43:27+03:00 4 месяца, 4 недели назад
45

@Owen, согласно vishes_shell ответ, вам нужно будет сделать:

python manage.py makemigrations mainsite

в первый раз, чтобы создать миграцию папок, которая будет содержать ваши миграции, тогда вы можете просто сделать


python manage.py makemigrations

В будущем, если вы добавите новое приложение, не забудьте снова сделать первую команду (сменив "основной сайт" на имя вашего приложения), прежде чем использовать вторую.

ответил(а) 2021-01-25T18:43:27+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема