迁移时的django错误:“没有唯一的约束条件匹配给定表的键 [英] django error on migration: "There is no unique constraint matching given keys for referenced table

查看:522
本文介绍了迁移时的django错误:“没有唯一的约束条件匹配给定表的键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我看到很多这类问题突然出现(很少回答),而在我所看到的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=Trueto_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错误:“没有唯一的约束条件匹配给定表的键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆