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.9+ 中合并连续的数据库迁移?

从 Django 1.6 升级到 1.9:python manage.py migrate 失败

迁移应用程序中缺少 django 1.9 models_module

Django 1.9 在迁移中删除外键

刷新单应用程序 django 1.9