所以我看到很多这类问题都出现了(很少有人回答),而且在我看到的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)
答案 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);
答案 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