2017-02-14 23 views
1

Итак, я видел, что появилось много таких вопросов (немногие ответили), и ни один из аспектов Django, которые я видел. я смущен, почему я получаю ошибку, я предполагаю, что я что-то упустил на своем полевом декораторе или что не в моем определении модели. Вот две модели ... (один сокращенно). Я думал, что все правильно с уникальными и первичный ключ установлен верно в одной таблице, что внешний ключ дает ссылку на но при Migrate я получаю эту ошибку:Ошибка django при миграции: «Нет уникального ограничения соответствия заданным ключам для указанной таблицы

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) 

ответ

2

Codejoy,

При определении PrimaryKey, оно автоматически устанавливается как уникальный .. Так что, просто идти по:

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 с zone_id!

Если поле вы пытаетесь сделать отношение не является первичным ключом, то вы можете добавить unique=True и 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 
+0

Хорошо сделал, как вы предложили (обновленный пост) и перезапустил makemigrations и мигрируют ... и получил ту же ошибку :('django.db.utils.ProgrammingError: нет уникального ограничения соответствия заданным ключам для таблицы с надписью« swsite_zoneentity » ' – Codejoy

+0

. Пожалуйста, проверьте мои результаты. Я удалил геометрии, потому что у меня нет geodjango здесь. Во всяком случае, можете ли вы удалить свой db и/или удалить свою папку миграций? Это может вызвать несоответствие – bobleujr

+0

Я не хочу тост мой d atabase, могу ли я просто удалить папку миграции? Я думаю, что для этого было больше шагов, но я рисую пробел о том, как сбросить это. – Codejoy