Django ModelChoiceField - benutze etwas anderes als ID?

8

Angenommen, ich habe eine Tabelle address und es hat ein postal_code -Feld - ModelChoiceField erlaubt mir nicht, etwas anderes als PKs zu verwenden, um Existenz korrekt zu validieren? Was wäre der Weg zu gehen? Normale Eingabe und clean_*() verwenden?

    
RS7 22.03.2012, 17:06
quelle

3 Antworten

20

Was ist mit to_field_name ? Ich bin mir nicht sicher, ob es irgendwo dokumentiert ist, aber Sie können es leicht zwischen ModelChoiceField Konstruktor params finden: Ссылка . Es wird zum Filtern von Feldabfragen verwendet.

Zum Beispiel:

%Vor%     
paluh 17.07.2012 12:49
quelle
1

Wenn postal_code ein Fremdschlüssel für ein PostalCode-Modell ist, das gültige Postleitzahlen enthält, verwende ich einfach ein CharField und führe dann eine Reinigung durch, wie Sie es vorgeschlagen haben. Meine saubere Methode würde so aussehen:

%Vor%     
nates 22.03.2012 17:38
quelle
0

ModelChoiceFields dienen dazu, zwischen einer Auswahl von vorhandenen Modellinstanzen auszuwählen. Dies wird fast immer am besten durch eine Art von Select-Feld dargestellt.

Das heißt, haben Sie wirklich einen FK von Adresse zu postal_code, wie Sie implizieren. Was speichern Sie in einer PostalCode-Tabelle, um die zusätzliche Tabelle zu rechtfertigen, die für jede adressbezogene Abfrage verknüpft werden muss?

In den meisten Fällen sollte postal_code einfach ein CharField sein. Wenn Sie in diesem Fall überprüfen möchten, ob der Wert gültig ist, können Sie das Attribut choices mit einer Liste gültiger Postleitzahlen verwenden. Beachten Sie, dass die Pflege einer Liste mit gültigen Postleitzahlen von Hand sehr mühsam ist.

Wenn Sie wirklich eine PostalCode-Tabelle haben und denken, dass es eine gute Idee ist (was in einigen Fällen auch der Fall sein könnte), sollten Sie den postal_code als Primärschlüssel und nicht als Standard-Autoinkrement verwenden Daten exportierbarer, und löst Ihr Problem mit der Validierung.

    
John 22.03.2012 17:34
quelle