2016-04-28 1 views
9

Ich möchte für einen benutzerdefinierten Namen schaffen, auf den Etikett in meiner Modelform dies mein forms.py istwie kann ich die Modelform Etikett ändern und gebe ihm einen benutzerdefinierten Namen

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" 
     ] 

ich das ändern will statt Video möchte ich es einbetten. Ich überprüfte die Dokumentation, fand aber nichts, was mir helfen würde. Ist es möglich, ohne dass ich mein Modell neu anordnen muss? Wenn das so ist, wie? danke

Antwort

20

Vom documentation:

Sie, die Etiketten angeben help_texts und error_messages Attribute der inneren Meta-Klasse, wenn Sie ein Feld weiter anpassen möchten.

Es gibt Beispiele direkt unter diesem Abschnitt der Dokumentation. So können Sie tun:

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

rettete mein Tag, Kumpel! Ich wollte mit db Spaltennamen xD oder zumindest mit Modellfeldnamen xD – fanny

+2

durcheinander bringen Hinweis: Wenn Sie das Label übersetzen, sollte dies in der __init__ Methode des Formulars getan werden: self.fields ['video']. Label = _('Einbetten'). Dies fängt die aktuelle Sprache zur Laufzeit ein, während das Ausführen in Meta die Übersetzung beim Start in der Standardsprache macht (ist also falsch für Benutzer von Nicht-Standardsprache). – Sean

8

Ja, you can. Nutzen Sie einfach label Argument:

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

oder definieren Sie es in Ihrem Meta Klasse:

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

Eine einfache Möglichkeit, dies zu erreichen, ohne die Form der Bearbeitung zu change the verbose_name auf dem Modell wäre. Für das video Feld auf Ihrem Modell können Sie das Etikett auf der Form von „Video“ auf „einbetten“ ändern wie folgt:

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