我正在创建一个新的 Django 应用程序。所以我在训练。
描述竞争模式
class Competition(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True)
def __str__(self):
return self.title
做了迁移和所有这些。
然后我意识到应该在模型中再添加一个字段。
class Competition(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True)
event_place = models.CharField(max_length=200)
def __str__(self):
return self.title
我创建迁移 -python manage.py makemigrations
我执行迁移 -python manage.py migrate
但在表中未创建新字段。
如何向数据库中添加新字段?数据库 - SQLite。姜戈 2.0
迁移文件的内容
# Generated by Django 2.0 on 2017-12-15 06:15
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('competitions', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Competition',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('slug', models.SlugField(max_length=200, unique=True)),
('event_place', models.CharField(max_length=200)),
],
]
结论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
competitions
[X] 0001_initial
[ ] 0002_auto_20171215_0915
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
home
(no migrations)
sessions
[X] 0001_initial
尝试将默认设置为空字符串:
然后你需要重新迁移。
我以这种方式解决了这个问题:
我删除了所有文件,除了
__init__.py文件夹migrations和db.sqlite3数据库文件。然后再次创建初始迁移
python manage.py makemigrationspython manage.py migrate和超级用户
python manage.py createsuperuser