2011-10-27 12 views
8

Capisco che, per impostazione predefinita, Django popola automaticamente id per ogni campo modulo al rendering con il formato id_for_%s. È possibile modificare il formato fornendo l'argomento auto_id con un formato diverso come valore per il costruttore Form.Django: modifica l'ID DOM a livello di campo modulo

Tuttavia, non è esattamente quello che sto cercando. Quello che voglio realizzare è cambiare l'id di uno solo dei tanti campi nella mia forma. Inoltre, la soluzione non dovrebbe interrompere l'uso di form = MyForm(request.POST).

PS. MyForm è un modulo di modello, quindi ogni ID viene derivato dal relativo campo Modello corrispondente.

Grazie per l'aiuto.

+0

Potrebbe farla franca con l'utilizzo di un classe? Questo è sicuramente molto più semplice e meno incline agli errori (è sufficiente modificare il widget). – sdolan

+0

@sdolan - Ho dimenticato di dire che questa domanda riguardava la forma del modello. Sto cercando soluzioni diverse dal cambiare il nome del campo del modello. – tamakisquare

+0

Non sarebbe necessario. Sta semplicemente aggiornando il widget del campo quando costruisci il 'ModelForm'. Se funzionasse, pubblicheremo una soluzione completa come risposta. – sdolan

risposta

15

Il quadro appare forme per generare etichette qui:

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) 

Il che significa che si può solo fornire il vostro widget di campo con una chiave di "id" per impostare a tutto ciò che desideri.

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

O ignorare init e impostare le attrs dopo l'inizializzazione modulo.

non vedo come questo possa rompere un modulo come quadro forme di Django non è mai a conoscenza di ids HTML (che i dati non viene passato al server ...)

+2

Yuji - Hai ragione. Cambiare _id_ non infrange il quadro delle forme di django. Ho ottenuto gli attributi html _name_ e _id_ mescolati. È l'attributo _name_ che Django si basa sulla mappatura di un modulo su un'istanza del modello. Grazie per la risposta. – tamakisquare

Problemi correlati