¿Puede un Car
tener múltiples color
s? En ese caso, color
debe ser many to many relationship en lugar de CharField
. Si, por el contrario, desea hacer algo como Unix permissions (es decir, Rojo + Azul, Rojo + Azul + Verde, etc.), asigne valores numéricos a cada uno de ellos y haga de un integer field.
actualización
(Después de leer comentario) Puede utilizar un custom form para editar su modelo de administración en lugar del predeterminado ModelForm
. Este formulario personalizado puede usar un widget de opción múltiple que permite a los usuarios seleccionar varios colores. A continuación, puede anular el método clean()
del formulario para devolver un valor adecuadamente concatenado ('RB', etc.).
Actualización 2
Aquí hay un código:
En primer lugar, eliminar las opciones del campo del modelo. También aumente su tamaño máximo a 2. No queremos opciones aquí; si lo hacemos, entonces tendremos que agregar una opción para cada combinación de colores.
class Car(models.Model):
...
color= models.CharField(max_length=2)
Segunda añadir una costumbre ModelForm
a utilizar en aplicación de administración. Este formulario anulará el color y, en su lugar, lo declarará como un campo de opción múltiple. Nosotros do necesitamos opciones aquí.
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
Tenga en cuenta que he agregado solo un par de validaciones. Es posible que desee más y/o personalizar las validaciones.
Finalmente, registre este formulario con el administrador. Dentro de su admin.py
:
class CarAdmin(admin.ModelAdmin):
form = CarAdminForm
admin.site.register(Car, CarAdmin)
realidad mi ejemplo fue malo, he actualizado mis COLORES para una mejor aclaración. – Hellnar
@Hellnar: * si * su usuario administrador selecciona varios colores, ¿cómo planea almacenarlos? ¿O solo quieres un cuadro de selección múltiple aunque solo quieras almacenar un color? –