2016-04-28 11 views
9

Voglio creare un nome personalizzato per il delle etichette nella mia ModelForm questo è il mio forms.pycome posso cambiare l'etichetta ModelForm e dargli un nome personalizzato

class PostForm(forms.ModelForm): 
    body = forms.CharField(widget=PagedownWidget) 
    publish = forms.DateField(
     widget=forms.SelectDateWidget, 
     initial=datetime.date.today, 
    ) 

    class Meta: 
     model = Post 
     fields = [ 
      "title", 
      "body", 
      "author", 
      "image", 
      "image_url", 
      "video_path", 
      "video", 
      "publish", 
      "tags", 
      "status" 
     ] 

voglio cambiare la invece di video, voglio dire di incorporare. Ho controllato la documentazione ma non ho trovato nulla che potesse aiutarmi a farlo. è possibile senza che io debba riorganizzare il mio modello? se é cosi, come? grazie

risposta

20

Dal documentation:

È possibile specificare le etichette, help_texts e error_messages attributi della classe Meta interna se si desidera personalizzare ulteriormente un campo.

Ci sono esempi appena sotto quella sezione dei documenti. Così, si può fare:

class Meta: 
    model = Post 
    labels = { 
     "video": "Embed" 
    } 
+1

salvato la giornata, amico! Volevo fare confusione con i nomi delle colonne db xD o almeno con i nomi dei campi dei modelli xD – fanny

+2

nota: se si sta traducendo l'etichetta, questo dovrebbe essere fatto nel metodo __init__ del modulo: self.fields ['video']. Label = _('Incorporare'). Questo acquisisce il linguaggio corrente in fase di esecuzione, mentre farlo in Meta rende la traduzione all'avvio in lang predefinito (quindi sarà errata per gli utenti di lang non predefiniti). – Sean

8

Sì, you can. Basta usare l'argomento label:

class PostForm(forms.ModelForm): 
    ... 
    video = forms.FileField(label='embed') 

o definire all'interno della vostra Meta classe:

class PostForm(forms.ModelForm): 
    ... 
    class Meta: 
     ... 
     labels = { 
      "video": "embed" 
      ... 
     } 
0

Un modo semplice per raggiungere questo obiettivo senza modificare il modulo potrebbe essere quella di change the verbose_name sul modello. Per il campo video del modello è possibile cambiare l'etichetta sul modulo da "video" a "embed" in questo modo:

class Post(models.Model) 
    video = models.UrlField(verbose_name="embed") 
    # Other fields 
Problemi correlati