Python Django 1.9 迁移错误“创建新内容类型时出错...”
Posted
技术标签:
【中文标题】Python Django 1.9 迁移错误“创建新内容类型时出错...”【英文标题】:Python Django 1.9 migrate error 'error creating new content types...' 【发布时间】:2016-05-12 20:17:14 【问题描述】:我正在使用 Python 3.4 和 Django 1.9.1,并且正在尝试迁移我的新模型。首先我在命令提示符下写: python manage.py makemigrations 任务,并且没有问题。但后来我输入:
python manage.py 迁移任务
但我不断收到有关内容类型的此错误:
'创建新内容类型时出错。请确保在尝试单独迁移应用程序之前迁移内容类型'
我尝试过查看类似的 *** 问题,但没有任何帮助。如何让这个错误停止? Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually 的一个这样的解决方案指出:
通过手动从 'django_content_type' 表中删除列名。例如。
'ALTER TABLE django_content_type DROP COLUMN name'
但是我该怎么做呢?到目前为止,我还没有弄清楚如何在 Django 中使用这样的纯 SQL 语句。我正在使用 PostgreSQL,并且不断遇到各种问题。请帮忙。以下是我的任务模型:
from django_pg import models
from django.contrib.auth.models import User
# Create your models here.
OUTCOME_CHOICES = (
('U', 'Unsuccessful'),
('S', 'Successful'),
)
STATS_CHOICES = (
('1', 'Extremely Low'),
('2', 'Very Low'),
('3', 'Low'),
('4', 'Average'),
('5', 'Good'),
('6', 'Above Average'),
('7', 'High'),
('8', 'Very High'),
('9', 'Super Human'),
('10', 'Above and Beyond'),
)
class Hero(models.Model):
codename = models.CharField(max_length = 20)
def __str__(self):
return self.codename
class Team (models.Model):
name = models.CharField(max_length = 20)
address = models.CharField(max_length = 100)
description = models.TextField
leader = models.CharField(max_length = 20)
members = models.TextField
class Customer(models.Model):
first_name = models.CharField(max_length = 25)
surname = models.CharField(max_length = 30)
address = models.CharField(max_length = 100)
citizenship = models.CharField(max_length = 40)
class Mission(models.Model):
customer = models.ForeignKey('Customer')
description = models.TextField
location = models.CharField(max_length = 50)
difficulty = models.CharField(max_length = 20)
def __str__(self):
return self.description, self.location, self.difficulty
class Alias(models.Model):
hero = models.ForeignKey('Hero')
first_name = models.CharField(max_length = 25)
surname = models.CharField(max_length = 30)
former_codenames = models.TextField
occupation = models.CharField(max_length = 30)
address = models.CharField(max_length = 100)
citizenship = models.CharField(max_length = 30)
class HeroStats(models.Model):
hero = models.ForeignKey('Hero')
height = models.CharField(max_length = 10)
weight = models.CharField(max_length = 10)
powers = models.TextField
intelligence = models.CharField(max_length = 5, choices = STATS_CHOICES)
stamina = models.CharField(max_length = 5, choices = STATS_CHOICES)
strength = models.CharField(max_length = 5, choices = STATS_CHOICES)
class HeroStatus(models.Model):
hero = models.ForeignKey('Hero')
hero = models.IntegerField
mission = models.IntegerField
team = models.IntegerField
def __str__(self):
return "0 is registered in team 1, and is currenly on mission 3".format(self.hero, self.team, self.mission)
class Report(models.Model):
mission = models.ForeignKey('Mission')
outcome = models.CharField(max_length = 15, choices = OUTCOME_CHOICES)
comments = models.TextField
def __str__(self):
return self.outcome
【问题讨论】:
【参考方案1】:运行python manage.py makemigrations && python manage.py migrate
。
如果您提供特定的应用标签(例如“任务”),您将仅为该应用运行迁移。在创建 django 核心应用的表之前,您无法迁移自己的应用。
【讨论】:
【参考方案2】:'创建新内容类型时出错。请确保在尝试单独迁移应用程序之前迁移内容类型'
正如错误所说,您应该在迁移应用之前迁移内容类型应用。
python manage.py migrate contenttypes
python manage.py migrate missions
【讨论】:
试过了,但错误仍然存在。我在问题中解释了同样的情况。只是我使用的是 django 1.8。 @SahanaPrabhakar 这个问题已经有一年多了,如果它对你不起作用,我建议你问一个新问题,并包含足够的细节来重现问题。【参考方案3】:我通过删除所有迁移文件并删除我的数据库解决了我的问题(我目前正在使用 sql lite。我只是删除了数据库)。 之后,我只需运行 makemigration 和 migrate 命令。
我犯了删除迁移的错误,进行了一些更改并再次迁移。 这会导致问题,因为我的数据库表不再与我的迁移文件同步。
【讨论】:
以上是关于Python Django 1.9 迁移错误“创建新内容类型时出错...”的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Django 1.9 中迁移——奇怪的 SQL 错误 "django.db.utils.OperationalError: near ")": syntax er
从 Django 1.6 升级到 1.9:python manage.py migrate 失败