Kann ein Car
mehrere color
s haben? In diesem Fall sollte color
eher ein many to many relationship sein als ein CharField
. Wenn Sie andererseits etwas wie Unix permissions (d. H. Rot + Blau, Rot + Blau + Grün usw.) machen möchten, dann weisen Sie jedem davon numerische Werte zu und machen color
einen integer field.
aktualisieren
(Nach dem Lesen Kommentar) Sie können einen custom form verwenden Ihr Modell in Admin anstelle des Standard-ModelForm
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 clean()
des Formulars überschreiben, um einen entsprechend verketteten Wert ('RB' usw.) zurückzugeben.
Update 2
Hier einige Code:
zuerst die Auswahl aus dem Modellfeld entfernen. 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.
class Car(models.Model):
...
color= models.CharField(max_length=2)
Zweitens fügen Sie eine benutzerdefinierte ModelForm
in der Admin-App verwenden. Dieses Formular überschreibt die Farbe und deklariert es stattdessen als Mehrfachauswahlfeld. Wir tun müssen hier Entscheidungen treffen.
COLORS= (
('R', 'Red'),
('B', 'Yellow'),
('G', 'White'),
)
class CarAdminForm(ModelForm):
color = forms.MultipleChoiceField(choices = COLORS)
class Meta:
model = Car
def clean_color(self):
color = self.cleaned_data['color']
if not color:
raise forms.ValidationError("...")
if len(color) > 2:
raise forms.ValidationError("...")
color = ''.join(color)
return color
Beachten Sie, dass ich nur ein paar Validierungen hinzugefügt habe. Vielleicht möchten Sie mehr und/oder passen Sie die Validierungen an.
Schließlich registrieren Sie dieses Formular mit admin. In Ihrem admin.py
:
class CarAdmin(admin.ModelAdmin):
form = CarAdminForm
admin.site.register(Car, CarAdmin)
tatsächlich Mein Beispiel war schlecht, ich habe meine FARBEN für eine bessere Erläuterung aktualisiert. – Hellnar
@Hellnar: * Wenn * Ihr Admin-Benutzer mehrere Farben auswählt, wie planen Sie, sie zu speichern? Oder möchten Sie nur eine Mehrfachauswahlbox, obwohl Sie nur eine Farbe speichern möchten? –