2016-07-26 12 views
0

Ich habe eine MySQL-Datenbank mit 9 Tabellen. Sie sind alle irgendwie miteinander verwandt, aber ich habe Probleme mit der Verbindung mit Fremdschlüsseln. Zum Beispiel sind hier zwei meiner Tabellen, die ich eine Störung erhalte, wenn ich zu Python manage.py Migrate versuchen:Django Primärschlüssel, der als Fremdschlüssel fungiert

class Release(models.Model): 
    release_ID = models.CharField(max_length=25, primary_key =True) 
    releaseversion = models.CharField(max_length=25) 
    model_ID = models.ForeignKey(Model, on_delete=models.CASCADE) #comes from Model class 

class Subrelease(models.Model): 
    subrelease_ID = models.CharField(max_length=25) 
    release_ID = models.ForeignKey('Release', blank =True) #comes from Release class 
    subreleaseversion = models.CharField(max_length=25) 

Wie würde ich den Primärschlüssel aus der Klasse Release zu erstellen, die sein release_ID auch die ForeignKey release_ID ist in der Klasse Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

Nachdem ich laufen wandern bekomme ich diese in cmd: django.db.utils.InternalError: (1829, „Can not Spalte 'id' fallen: in einem Fremdschlüssel benötigt 'app_subrel_release_ID_id_8e08450_fk_app_release_id' der Tabelle 'db.app_subrelease' ")

UPDATE: Ist das gut/okay zu tun? Ich habe keine Fehler bei der Migration zur DB?

class Release(models.Model): 
    #release_ID = models.CharField(max_length=25, primary_key =True)THIS WILL BE OUR PRIMARY KEY MADE BY DJANGO 
    releaseversion = models.CharField(max_length=25) 
    model = models.ForeignKey(Model, on_delete=models.CASCADE) #comes from Model class model_ID 



class Subrelease(models.Model): 
    #subrelease_ID = models.CharField(max_length=25) THIS WILL BE OUR PRIMARY KEY MADE BY DJANGO 
    release = models.ForeignKey(Release, on_delete=models.CASCADE) #comes from Release class release_ID 
    subreleaseversion = models.CharField(max_length=25) 
+1

"Ein Fehler"? Teilen ist Kümmern. –

+0

Können Sie Ihren Einzug richtig formatieren? Welcher Fehler? Zurück verfolgen? Außerdem glaube ich nicht, dass Sie leer = True als Fremdschlüssel möchten –

+0

oops, Sorry, ich habe vergessen, den Fehler zu posten. Danke für die Information. Ich habe meine Frage aktualisiert. – Carbon

Antwort

1

Sie könnten versuchen, die to_field und db_column Optionen zu verwenden.

class B(models.Model): 
    name = models.ForeignKeyField(A, to_field="name", db_column="name") 

Sobald Sie den Fremdschlüssel erstellt haben, können Sie den Wert und zugehörige Instanz zugreifen wie folgt:

>>> b = B.objects.get(id=1) 
>>> b.name_id # the value stored in the 'name' database column 
>>> b.name # the related 'A' instance 

Referenz: this answer

+0

Ich habe das versucht, aber ich bekomme diesen Fehler: AttributeError: 'Modul' Objekt hat kein Attribut 'ForeignKeyField' – Carbon

+0

das ist richtig, ich werde versuchen, mehr zu helfen – moshemeirelles

Verwandte Themen