我有一个在本地工作的Django应用程序,但是当我尝试将其部署到生产环境时,它失败并出现以下错误:
django.db.utils.ProgrammingError: column "type_id" cannot be cast automatically to type integer
HINT: You might need to specify "USING type_id::integer".
我的本地设置和制作之间的主要区别在于我使用的是SQLite3,而制作是使用postgres
它失败的迁移是迁移10,看起来像这样。
class Migration(migrations.Migration):
dependencies = [
('speakers', '0009_auto_20180117_1335'),
]
operations = [
migrations.AlterField(
model_name='speaker',
name='type',
field=models.ForeignKey(to='speakers.Type'),
),
]
前面的迁移,它的依赖关系和最后一次工作迁移如下所示:
class Migration(migrations.Migration):
dependencies = [
('speakers', '0008_auto_20180117_1309'),
]
operations = [
migrations.CreateModel(
name='Type',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=200)),
],
options={
'verbose_name': 'Type',
'verbose_name_plural': 'Types',
},
),
migrations.RenameField(
model_name='speaker',
old_name='speaker_categories',
new_name='type',
),
]
为了制作东西,我还会包括模型(当他们看到最后)
class Type(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
class Meta:
verbose_name = _("Type")
verbose_name_plural = _("Types")
class Speaker(models.Model):
VIDEO_SRC_TYPES = (
('yt', 'Youtube'),
('vm', 'Vimeo'),
)
status = models.CharField(
max_length=40,
choices=STATUSES,
verbose_name=_("Status"),
default=DEFAULT_STATE)
type = models.ManyToManyField(Type)
(#'扬声器'模型中的大多数字段已被移除以保持代码简短)
我怀疑问题是由于SQLite和postgres之间存在一些差异,这导致迁移在SQLITE上运行并在postgres上崩溃。但我对数据库的具体细节并不是很了解,我不知道从哪里开始。有没有人知道发生了什么以及如何解决这个问题?任何帮助都会非常感激,因为我们的团队目前非常困难
规格:
Python:python2.7。 (是的,我知道,但它是一个旧应用程序)
数据库制作:postgres
DB local:sqlite
答案 0 :(得分:0)
我们已经解决了以下问题:
这个过程解决了这个问题。
现在关于问题的原因,有两个主要原因(正如Adam Barnes在原帖中的评论中指出的那样)
我已经建议我的经理尽快改变这种情况,因为这里的最佳做法可以防止这种情况发生。
感谢大家的帮助!