how can I change the modelform label and give it a custom name

我的未来我决定 提交于 2019-12-18 12:46:21

问题


I want to create a custom name for on of the labels in my modelform this is my forms.py

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

I want to change the instead of video I want it to say embed. I checked the documentation but didn't find anything that would help me do that. is it possible without me having to rearrange my model? if so how? thanks


回答1:


From the documentation:

You can specify the labels, help_texts and error_messages attributes of the inner Meta class if you want to further customize a field.

There are examples just below that section of the docs. So, you can do:

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



回答2:


Yes, you can. Simply use the label argument:

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

or define it inside your Meta class:

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



回答3:


class Meta:

    model = Book
    fields = ('title', 'publication_date', 'author', 'price', 'pages','book_type',)
    labels  = {
        'title':'Titulo', 
        'publication_date':'Data de Publicação', 
        'author':'Autor', 
        'price':'Preço', 
        'pages':'Número de Páginas',
        'book_type':'Formato'
        }
    widgets = {
        'title': forms.TextInput(attrs={'class':'form-control'}),
        'publication_date': forms.TextInput(attrs={'class':'form-control'}),
        'author': forms.TextInput(attrs={'class':'form-control'}),
        'price': forms.TextInput(attrs={'class':'form-control'}),
        'pages': forms.TextInput(attrs={'class':'form-control'}),
        'book_type': forms.TextInput(attrs={'class':'form-control'}),
    } 



回答4:


An easy way to achieve this without editing the form would be to change the verbose_name on the model. For the video field on your model you could change the label on the form from "video" to "embed" like so:

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


来源:https://stackoverflow.com/questions/36905060/how-can-i-change-the-modelform-label-and-give-it-a-custom-name

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!