2016-04-28 10 views
9

Chcę utworzyć niestandardową nazwę na etykiet w moim ModelForm to moja forms.pyw jaki sposób mogę zmienić etykietę ModelForm i nadać mu nazwę niestandardową

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

Chcę zmienić zamiast wideo chcę powiedzieć, że to osadzam. Sprawdziłem dokumentację, ale nie znalazłem niczego, co mogłoby mi w tym pomóc. czy to możliwe bez konieczności przestawiania mojego modelu? Jeśli tak to jak? dzięki

Odpowiedz

20

Z documentation:

Można określić etykietach , help_texts i error_messages atrybutów wewnętrznej klasy Meta, jeśli chcesz dalej dostosowywać pole.

Istnieją przykłady poniżej tej sekcji dokumentów. Tak, można to zrobić:

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

zapisany mój dzień, kolego! Chciałem zepsuć nazwy kolumn db xD lub przynajmniej nazwy pól modelu xD – fanny

+2

uwaga: jeśli tłumaczysz etykietę, należy to zrobić w metodzie __init__ formularza: self.fields ['video']. _('Osadzać'). Przechwytuje bieżący język w środowisku wykonawczym, podczas gdy wykonywanie go w Meta sprawia, że ​​tłumaczenie przy uruchomieniu jest w domyślnym języku (a zatem będzie błędne dla użytkowników języka innego niż domyślny język). – Sean

8

Tak, . Wystarczy użyć label argument:

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

lub określić go wewnątrz klasy Meta:

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

An łatwy sposób osiągnąć ten cel bez edytowania formularza byłoby change the verbose_name modelu. Na polu video modelu można zmienić etykietę na postaci z „Video” na „embed” tak:

class Post(models.Model) 
    video = models.UrlField(verbose_name="embed") 
    # Other fields 
Powiązane problemy