Ich verstehe, dass das ORM in Django den ENUM-Typ in MySQL oder PostgreSQL nicht unterstützt, da dies ursprünglich eine MySQL-Erweiterung war und nicht über andere DB-Typen übertragbar war. Die beiden Optionen bestehen also darin, ein "Auswahl" -Argument für Ihr Modell zu verwenden oder eine Fremdschlüsselreferenz zu verwenden.Django Model - Auswahl gegen Fremdschlüssel?
Was sind die Vor- und Nachteile dieser Ansätze?
Für so etwas wie Geschlecht, gehe ich davon aus würden Sie „Auswahl“ verwenden, zB:
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
...
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
aber für so etwas wie Staatsnamen, was der Grund für und gegen die Verwendung einer separaten Tabelle, und Fremdschlüssel zu diesem Tisch?
state = models.ForeignKey(AustralianState)
Unter welchen Umständen würden Sie einen gegen den anderen verwenden?
Cheers, Victor
Ist dies aus Leistungsgründen? Hmm, also für eine große Anzahl von Staaten, nehme ich an, dass eine FK-Lookup-Tabelle der richtige Weg ist? Und dann würden Sie nur die Zustände in einem Django-Armaturen auflisten? – victorhooi
Es sind nicht so sehr die Performance-Gründe - die Leistung ist wahrscheinlich besser mit Tupeln, es sei denn, Sie betrachten mehr als ein paar tausend Möglichkeiten - es ist meist ein Wartungsproblem. Tatsächlich hat Django eine Vielzahl von Länder-/Staatsfeldern, die in Lokalitäten eingebaut sind, glaube ich. Und ich nehme an, Sie könnten ein StateField erstellen, das Sie in andere Dateien importiert haben. Vollständige Offenlegung: Ich bin mir ziemlich sicher, dass die Länder- und Statusfelder, die ich in Teilen meiner Apps verwende, tatsächlich Auswahlmöglichkeiten verwenden. Aber FK wäre auch eine gute Wahl. –
Ich würde hinzufügen, dass in diesem Fall die Verwendung der Länder- und Zustandsabkürzung als Fremdschlüssel eher als eine inkrementierende Ganzzahl viel sinnvoller ist. –