关于迁移的django错误:"没有唯一约束匹配给定引用表的键

时间:2017-02-14 19:10:24

标签: python django postgis

所以我看到很多这类问题都出现了(很少有人回答),而且在我看到的Django方面都没有。我很困惑为什么我得到错误,我猜我错过了我的场装饰器或我的模型定义中没有的东西。这是两个模型......(一个缩写)。我认为我在外键提供引用的一个表中将唯一和主键设置为true时做了一切正确但在迁移时我收到此错误:

django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table "swsite_zoneentity"

编辑日期代码...

class ZoneEntity(models.Model):
    zone_number = models.CharField(max_length=100, primary_key=True)
    mpoly = models.PolygonField() #this should grow and shrink for the most representative one...
    objects = models.GeoManager() 
    created_at=models.DateField(auto_now_add=True)
    updated_at=models.DateField(auto_now=True)

class CesiumEntity(models.Model):
    be_number = models.CharField(max_length=100) #the number assigned to a foot print to distinguish
    #zone_id = models.CharField(max_length=100, null=True, blank=True)
    zone_id = models.ForeignKey('ZoneEntity', null=True, blank=True)

3 个答案:

答案 0 :(得分:2)

Codejoy,

定义主键时,它会自动设置为唯一。所以,请按:

app.mydomain.com

这会自动将ZoneEntity的PK绑定到zone_id!

如果您尝试建立关系的字段不是主键,则可以添加class ZoneEntity(models.Model): zone_number = models.CharField(max_length=100, primary_key=True) .... class CesiumEntity(models.Model): ... zone_id = models.ForeignKey('ZoneEntity', null=True, blank=True) ... unique=True

to_field='foo'

答案 1 :(得分:1)

要解决此问题,需要自己对postgres表ID添加唯一约束。

psql <your-database-name>
ALTER TABLE swsite_zoneentity ADD CONSTRAINT zone_unique_id UNIQUE(id);

this answer

答案 2 :(得分:1)

这个问题出现的次数最多是因为您从转储中复制或创建了数据库,并且主键列上的唯一约束(以及其他约束丢失了)。

解决方案:

Open your DB with pg4admin or any client,    Databases>your_database>schema>public>tables>your_table right-click   
on the table name, 
Choose Properties 
Select columns tabs 
switch primary key on your pk column
save/exit
run migration again