如何更改模型标签并为其指定自定义名称

not*_*ess 24 django modelform

我想为我的modelform中的标签创建一个自定义名称,这是我的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"
         ]
Run Code Online (Sandbox Code Playgroud)

我想改变而不是视频我希望它说嵌入.我检查了文档,但没有找到任何可以帮助我做到这一点.是不是我不得不重新安排我的模型?如果是这样的话?谢谢

sol*_*oke 43

文档:

如果要进一步自定义字段,可以指定内部Meta类的标签,help_textserror_messages属性.

在文档的该部分下面有一些示例.所以,你可以这样做:

class Meta:
    model = Post
    labels = {
        "video": "Embed"
    }
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果要翻译标签,则应在表单的__init__方法中完成:self.fields ['video'].label = _('Embed').这在运行时捕获当前语言,而在Meta中执行它会使启动时的转换成为默认语言(因此对于非默认语言的用户来说将是错误的). (2认同)

Sel*_*cuk 14

是的,你可以.只需使用label参数:

class PostForm(forms.ModelForm):
    ...
    video = forms.FileField(label='embed')
Run Code Online (Sandbox Code Playgroud)

或者在你的Meta课程中定义它:

class PostForm(forms.ModelForm):
    ...
    class Meta:
        ...
        labels = {
            "video": "embed"
            ...
        }
Run Code Online (Sandbox Code Playgroud)


小智 7

class Meta:\n\n    model = Book\n    fields = ('title', 'publication_date', 'author', 'price', 'pages','book_type',)\n    labels  = {\n        'title':'Titulo', \n        'publication_date':'Data de Publica\xc3\xa7\xc3\xa3o', \n        'author':'Autor', \n        'price':'Pre\xc3\xa7o', \n        'pages':'N\xc3\xbamero de P\xc3\xa1ginas',\n        'book_type':'Formato'\n        }\n    widgets = {\n        'title': forms.TextInput(attrs={'class':'form-control'}),\n        'publication_date': forms.TextInput(attrs={'class':'form-control'}),\n        'author': forms.TextInput(attrs={'class':'form-control'}),\n        'price': forms.TextInput(attrs={'class':'form-control'}),\n        'pages': forms.TextInput(attrs={'class':'form-control'}),\n        'book_type': forms.TextInput(attrs={'class':'form-control'}),\n    } \n
Run Code Online (Sandbox Code Playgroud)\n


YPC*_*ble 5

在不编辑表单的情况下实现此目的的一种简单方法是更改verbose_name模型上的 。对于video模型上的字段,您可以将表单上的标签从“视频”更改为“嵌入”,如下所示:

class Post(models.Model)
    video = models.UrlField(verbose_name="embed")
    # Other fields
Run Code Online (Sandbox Code Playgroud)