问题描述
所以我看到很多这类问题突然出现(很少回答),而在我所看到的Django方面却没有.我很困惑为什么会收到错误,我猜想我的字段装饰器上缺少某些东西,或者我的模型定义中没有.这是两个模型...(一个缩写).我以为我在外键引用的一个表中将唯一键和主键设置为true,就可以正确地做所有事情,但是在迁移时会出现此错误:
So I have seen that a lot of these kinds of questions have popped up (few answered) and none in a Django aspect that I saw. I am confused why I am getting the error, I am guessing i am missing something on my field decorator or what not in my model definition. Here are the two models... (one abbreviated). I thought I did everything right with unique and primary key set to true in the one table that the foreign key gives reference to but upon migrate I get this error:
django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table "swsite_zoneentity"
编辑已过时的代码...
Edit up dated the code ...
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)
推荐答案
Codejoy,
定义主键时,它会自动设置为唯一键.因此,只需进行以下操作:
When you define a primarykey, it is automatically set as unique.. So, just go by:
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)
...
这将自动将ZoneEntity的PK与zone_id绑定!
This will automatically bind the PK of ZoneEntity with zone_id!
如果您尝试建立关系的字段不是主键,则可以添加unique=True
和to_field='foo'
If the field you are trying to make the relation IS NOT the primary key, then you can add unique=True
and to_field='foo'
- python manage.py. makemigration
s
Migrations for 'module1':
0002_auto_20170214_1503.py:
- Create model CesiumEntity
- Create model ZoneEntity
- Add field zone_id to cesiumentity
- python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, contenttypes, module1, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying module1.0002_auto_20170214_1503... OK
这篇关于迁移时的django错误:“没有唯一的约束条件匹配给定表的键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!