2012-08-16 21 views
7

Estoy usando ModelForms para hacer formularios para un sitio web, pero quiero más control de qué texto se muestra en el cuadro Seleccionar.Etiquetas para el campo de formulario de selección de Django

Un ejemplo de modelo podría tener este aspecto

class Test(models.Model) 
    ID = IntegerField() 
    Label = CharacterField() 
    recipient = ForeignKey(Person) 
    product = ForeignKey(Product) 

lo tanto, mi problema es que cuando hago una ModelForm de este modelo, los campos de clave externa se convierten en campos de selección, que tiene la clave primaria de el objeto en el valor subyacente, y el texto que se muestra es el texto del método de los objetos __unicode__(). En este caso, solo se muestra la identificación del producto (este es un número de código de serie, lo cual no tiene sentido para el usuario). Me gustaría poder crear una etiqueta personalizada como "[serial], [product name]".

Parece que no encuentro ningún puntero en la documentación oficial de Django, así que me pregunto si alguien podría ayudarme. :)

+0

no se puede cambiar '__unicode__' método de la modelo para mostrar cuál es esperado? – Rohan

+0

Esa sería la solución obvia, pero el método Unicode se usa mucho en todo el sitio web, donde es importante que solo muestre el número de serie. Entonces esa no es una opción, me temo que – Eldamir

Respuesta

7

Echa un vistazo a Django docs regarding the ModelChoiceField. Cita:

se llamará El método del modelo __unicode__ para generar cadena representaciones de los objetos para su uso en las opciones del campo; a proporcionar representaciones personalizadas, la subclase ModelChoiceField y sobrescriben label_from_instance. Este método recibirá un objeto modelo, y debe devolver una cadena adecuada para representarlo. Por ejemplo:

class MyModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "My Object #%i" % obj.id 
+0

que se parece a algo, que podría funcionar. Lo comprobaré – Eldamir

+0

Funcionó de maravilla. Gracias amigo – Eldamir

Cuestiones relacionadas