2011-10-27 20 views
8

Entiendo que, de forma predeterminada, Django rellena automáticamente id para cada campo de formulario al representar con el formato id_for_%s. Se puede modificar el formato proporcionando el argumento auto_id con un formato diferente como valor al constructor del Formulario.Django: Cambie el ID de DOM en el nivel de campo de formulario

Sin embargo, eso no es exactamente lo que estoy buscando. Lo que quiero lograr es cambiar la identificación de uno de los muchos campos en mi formulario. Además, la solución no debe interrumpir el uso de form = MyForm(request.POST).

PS. MyForm es un formulario modelo, por lo que cada id se deriva de su campo Modelo correspondiente.

Gracias por ayudarnos.

+0

Podría salir con el uso de una ¿clase? Eso seguro es mucho más fácil y menos propenso a errores (solo tiene que modificar el widget). – sdolan

+0

@sdolan - Olvidé mencionar que esta pregunta era sobre la forma del modelo. Estoy buscando soluciones que no sean cambiar el nombre del campo del modelo. – tamakisquare

+0

No tendrías que hacerlo. Simplemente estaría actualizando el widget del campo cuando construyes el 'ModelForm'. Si esto funciona, publicaré una solución completa como respuesta. – sdolan

Respuesta

15

El marco formas parece generar etiquetas aquí:

def _id_for_label(self): 
    """ 
    Wrapper around the field widget's `id_for_label` class method. 
    Useful, for example, for focusing on this field regardless of whether 
    it has a single widget or a MutiWidget. 
    """ 
    widget = self.field.widget 
    id_ = widget.attrs.get('id') or self.auto_id 
    return widget.id_for_label(id_) 
id_for_label = property(_id_for_label) 

Lo que significa que sólo puede proporcionar a su aparato de campo con una clave "id" para ajustarlo a lo que usted desea.

foo = forms.CharField(widget=forms.TextInput(attrs={'id': 'foobar'})) 

O anule init y configure los atributos después de la inicialización del formulario.

No veo cómo esto podría romper una forma de marco formas de Django no es siempre consciente de identificadores HTML (que los datos no se pasa al servidor ...)

+2

Yuji - Tienes razón. Cambiar _id_ no rompe el marco de formularios de django. Obtuve los atributos html _name_ y _id_ mixed. Es el atributo _name_ que Django se basa en asignar un formulario a una instancia del modelo. Gracias por la respuesta. – tamakisquare

Cuestiones relacionadas