django Modellwahloption als Mehrfachauswahlbox

8

Angenommen, ich habe ein solches Modell

%Vor%

Es wird als Auswahlfeld im Admin-Panel angezeigt, aber ich möchte, dass mein Administrator diese Farben wie viele-zu-viele-Beziehungen auswählt. Wie kann dies ohne eine ('RB', 'Red&Blue'), Art von Logik

erreicht werden     
Hellnar 27.08.2010, 08:41
quelle

4 Antworten

8

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 brauchen hier eine Auswahl.

%Vor%

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 :

%Vor%     
Manoj Govindan 27.08.2010, 08:48
quelle
2

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%     
Serjik 31.10.2015 11:30
quelle
1

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%     
makapuf 27.08.2010 09:37
quelle
1

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.

Link zur Dokumentation ...

    
FallenAngel 27.08.2010 11:23
quelle

Tags und Links