Kann ein Car
mehrere color
s haben? In diesem Fall sollte color
eher eine Beziehung von vielen zu vielen als eine sein %Code%. Wenn Sie auf der anderen Seite etwas wie Unix-Berechtigungen (dh Rot + Blau, Rot + Blau + Grün usw.), dann weisen Sie jedem von ihnen numerische Werte zu und machen CharField
ein ganzzahliges Feld .
Aktualisieren
(Nach dem Lesen des Kommentars) Sie können eine benutzerdefinierte verwenden Formular , um dein Modell in Admin anstatt der Standardversion color
zu bearbeiten. Dieses benutzerdefinierte Formular kann ein Mehrfachauswahl-Widget verwenden, mit dem Benutzer mehrere Farben auswählen können. Sie können dann die Methode ModelForm
des Formulars überschreiben, um einen entsprechend verketteten Wert ('RB' usw.) zurückzugeben.
Update 2
Hier ist ein Code:
Entfernen Sie zuerst die Auswahl aus dem Modellfeld. Erhöhen Sie auch seine maximale Größe auf 2. Wir wollen hier keine Auswahl - wenn wir das tun, müssen wir eine Auswahl für jede Kombination von Farben hinzufügen.
%Vor% Zweitens fügen Sie ein benutzerdefiniertes clean()
zur Verwendung in der Admin-App hinzu. Dieses Formular überschreibt die Farbe und deklariert es stattdessen als Mehrfachauswahlfeld. Wir
Beachten Sie, dass ich nur ein paar Validierungen hinzugefügt habe. Vielleicht möchten Sie mehr und / oder passen Sie die Validierungen an.
Registrieren Sie dieses Formular abschließend mit admin. In deinem ModelForm
:
Ich habe ein vollständiges Arbeitsbeispiel mit aussagekräftigen Modellen erstellt. Es funktioniert perfekt. Ich habe es auf Python 3.4.x und Django 1.8.4 getestet. Zuerst führe ich das Admin-Panel aus und erstelle Datensätze für jede Option in Thema-Modell
models.py
%Vor%forms.py
%Vor%admin.py
%Vor%Verwenden Sie eine separate Tabelle mit Farben (Rot, Blau, Grün) und, wie Sie bereits sagten, fügen Sie eine Beziehung zwischen vielen und vielen hinzu. Auswahltyp ist keine Mehrfachauswahl, nur eine Zeichenfolge mit hinzugefügter Benutzeroberfläche und Prüfungen.
Oder generieren Sie verfahrenstechnisch Ihre Auswahlmöglichkeiten mit iertools.combinations, Beispiel:
%Vor%Für Farben-Tupel, wenn Sie Ganzzahlen anstelle von Zeichen verwenden, können Sie commaseparatedintergerfield für Ihr Modell verwenden. Aber vergessen Sie nicht, commareparatedintegerfield ist eine Struktur auf Datenbankebene, also muss Ihr DBMS es unterstützen.
Tags und Links python django django-models