2016-04-28 2 views
9

Я хочу создать пользовательское имя на метки в моем ModelForm это мой forms.pyкак я могу изменить метку ModelForm и дать ему имя

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

Я хочу, чтобы изменить вместо видео я хочу, чтобы он вставлял. Я проверил документацию, но не нашел ничего, что могло бы помочь мне сделать это. возможно ли без меня переставить мою модель? если да, то как? спасибо

ответ

20

От documentation:

Вы можете указать этикетки, help_texts и error_messages атрибутов внутреннего мета-класса, если вы хотите дополнительно настроить поле.

Есть примеры чуть ниже этого раздела документов. Таким образом, вы можете сделать:

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

спас мой день, приятель! Я хотел связать имена столбцов db xD или, по крайней мере, с именами полей модели xD – fanny

+2

Примечание: если вы переводите метку, это должно быть сделано в методе __init__ формы: self.fields ['video']. Label = _ ('Вставить'). Это фиксирует текущий язык во время выполнения, тогда как его выполнение в Meta делает перевод при запуске по умолчанию lang (таким образом, это будет неправильно для пользователей не по умолчанию lang). – Sean

8

Да, you can. Просто используйте label аргумент:

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

или определить его внутри Meta класса:

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

Простой способ для достижения этой цели без редактирования формы будет change the verbose_name на модели. Для video поля на вашей модели вы можете изменить метку на форме от «видео» на «врезать», как так:

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