2017-02-14 1 views
1

So habe ich gesehen, dass viele dieser Arten von Fragen aufgetaucht sind (einige beantwortet) und keine in einem Django Aspekt, den ich sah bin verwirrt, warum ich den fehler bekomme, ich vermute ich vermisse etwas auf meinem felddekorateur oder was nicht in meiner modelldefinition.Hier sind die beiden modelle ... (eine abgekürzt) .Ich dachte ich habe alles richtig gemacht mit unique und Primärschlüssel auf true in der einen Tisch gesetzt, dass die Fremdschlüssel-Referenz ich diesen Fehler aber auf Migrate gibt bekommen:django Fehler bei der Migration: "Es gibt keine eindeutige Constraint Matching gegebenen Schlüssel für referenzierte Tabelle

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

Bearbeiten auf den Code vom ...

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) 

Antwort

2

Codejoy,

Wenn Sie eine PrimaryKey definieren, wird sie automatisch als einzigartig gesetzt .. Also, gehen Sie einfach nach:

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) 
    ... 

Dies wird die PK von ZoneEntity mit zone_id automatisch binden!

Wenn das Feld Sie die Beziehung zu machen versuchen, ist nicht der Primärschlüssel, dann können Sie hinzufügen unique=True und 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

Gut tat, wie Sie (aktualisiert post) vorgeschlagen und reran makemigrations und wandern ... und bekam den gleichen Fehler :('django.db.utils.ProgrammingError: Es gibt keine eindeutige Einschränkung passend gegebenen Tasten für referenzierte Tabelle" swsite_zoneentity " ' – Codejoy

+0

Bitte überprüfen Sie meine Ergebnisse .. Ich habe nur die Geometrien entfernt, weil ich nicht habe geodjango hier .. Wie auch immer, können Sie Ihre Datenbank löschen und/oder Ihre Migrationen Ordner löschen? Dies kann zu einem Mismatch führen – bobleujr

+0

Ich will nicht Toast mein d Atabase, kann ich den Migrationsordner einfach löschen? Ich denke, es gab mehr Schritte, aber ich zeichne ein leeres, wie man das zurücksetzt. – Codejoy

Verwandte Themen