【发布时间】:2017-11-05 13:04:21
【问题描述】:
我正在使用 Postgress 数据库的生产系统上运行迁移,运行时出现以下错误:
django.db.utils.ProgrammingError: 不允许表“website_experience”的多个主键
但在我的开发 SQL 数据库上运行良好。这是我正在使用的模型:
class Experience (models.Model):
title = models.CharField(max_length = 60)
company = models.CharField(max_length = 60)
city = models.CharField(max_length = 60)
start_date = models.DateField(blank=False, default=datetime.now)
end_date = models.DateField(blank=True, null=True)
description = models.CharField(max_length = 1000)
creative_user = ForeignKey(CreativeUserProfile, models.CASCADE)
最初,creative_user 字段(这是我的扩展 User 模型)是一个主键,但将其更改为 ForeignKey 以表示一个 CreativeUser 具有许多工作经验之间的一对多关系。
这是更改 ForeignKey 前后的迁移
class Migration(migrations.Migration):
dependencies = [
('website', '0003_auto_20170510_1436'),
]
operations = [
migrations.CreateModel(
name='Experience',
fields=[
('title', models.CharField(max_length=60)),
('company', models.CharField(max_length=60)),
('city', models.CharField(max_length=60)),
('startDate', models.DateField()),
('endDate', models.DateField(blank=True, null=True)),
('creative_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='website.CreativeUserProfile')),
],
),
]
这表示创建体验模型,并且 creative_user 是模型的主键。然后将其设为 ForeignKey 后,迁移看起来像:
class Migration(migrations.Migration):
dependencies = [
('website', '0004_experience'),
]
operations = [
migrations.AddField(
model_name='experience',
name='id',
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
preserve_default=False,
),
migrations.AlterField(
model_name='experience',
name='creative_user',
field =models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='website.CreativeUserProfile'),
),
]
正如我所说,这一切都适用于开发,但在 Postgress DB 上迁移认为我有多个主键。谁能指出我做错了什么?
谢谢。
【问题讨论】:
标签: django-models django-database