2016-04-04 9 views
0

Ich habe Django Admin in meinem Web implementiert, um alle Tabellen in meinen Modellen zu verwalten. Es funktioniert richtig, bis ich versuche, eine zufällige Tabelle ohne Primärschlüssel zu sehen (zum Bearbeiten, Hinzufügen, Löschen von Datensätzen). Wenn ich versuche, auf diese Tabelle zuzugreifen, erscheint die Meldung unbekannte Spalte xxx.id in der Feldliste.Django Admin kann keine Tabellen ohne Primärschlüssel darstellen

Ich weiß, Django fügt ID-Feld Tabellen ohne Primärschlüssel hinzu. Was könnte für mich arbeiten? Es macht mir nichts aus, wenn ich Id-Feld in List_field zeigen muss, aber wenn ich versuche, Django warnt mich dieses Feld existiert nicht. Konnte ich einen eindeutigen Wert für das lösen dieses (meine Tabellen, die PK nicht hat, hat stattdessen zusammen einzigartig ...)

Ich habe versucht, eine Primärschlüsseleigenschaft zu einem zufälligen Feld in der Klasse des Modells mit denen Probleme. Das funktioniert, aber ich muss keine Einschränkungen über Felder haben und wenn ich diese PK hinzufüge, kann ich diesen Wert in anderen Aufzeichnungen wiederholen.

Wie kann ich das lösen?

Antwort

1

Wenn Sie Änderungen am fraglichen Modell vorgenommen haben, müssen Sie möglicherweise migrieren. Im Stammverzeichnis des Projektes (oder wo auch immer die manage.py Datei) Typ

$ python manage.py makemigrations 

Dann

Typen
$ python manage.py migrate 

Es könnte sein, dass Sie ein Modellfeld zum Modell hinzugefügt, aber es ist nicht in der Datenbank noch , so erhalten Sie diesen Fehler, wenn Sie versuchen, es in Admin zu bearbeiten.

UPDATE

Basierend auf this question und this one, es klingt wie Django versucht, Auto-fügen Sie eine id Spalte, da Sie keinen Primärschlüssel auf Ihrem Modell definiert haben. Das id wurde möglicherweise nicht in der Datenbank weitergegeben. Deshalb versuchen

$ python manage.py dbshell 

Jetzt können Sie die Spalte direkt in die Datenbanktabelle hinzufügen

mysql> ALTER TABLE your_table_name ADD id integer AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST; 
mysql> exit; 

Dann versuchen Sie Ihr Admin-Seite neu zu laden ...

+0

Nö, ich tat es, und das Problem immer noch geschieht . Könnte etwas mit den Fremdschlüsseln zusammenhängen und keinen Primärschlüssel haben? Wenn ich einen zufälligen Primärschlüssel in einem Radom-Feld hinzugefügt habe, ist das Problem gelöst .... –

+0

Siehe oben Update. –

+0

Nochmals vielen Dank Ryan ... Es funktioniert ... Ich erinnere mich nur, Winterschlaf und Einheit zwingt Sie gleich. Sie sollten einen Primärschlüssel haben, wenn Sie Tabellen in Klassen mappen möchten. Groß!! –