【问题标题】:how can I change the modelform label and give it a custom name如何更改模型标签并给它一个自定义名称
【发布时间】:2016-08-22 15:36:54
【问题描述】:

我想为我的模型表单中的一个标签创建一个自定义名称 这是我的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"
         ]

我想更改我希望它说嵌入的而不是视频。我检查了文档,但没有找到任何可以帮助我做到这一点的东西。有没有可能我不必重新排列我的模型?如果是这样怎么办?谢谢

【问题讨论】:

    标签: django modelform


    【解决方案1】:
    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'}),
        } 
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        来自documentation

        如果您想进一步自定义字段,可以指定内部 Meta 类的 labelshelp_textserror_messages 属性。 p>

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

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

        【讨论】:

        • 拯救了我的一天,朋友!我想弄乱数据库列名 xD 或至少弄乱模型字段名 xD
        • 注意:如果你要翻译标签,这应该在表单的init方法中完成:self.fields['video'].label = _('嵌入')。这会在运行时捕获当前语言,而在 Meta 中执行此操作会在启动时使用默认语言进行翻译(因此对于非默认语言的用户来说将是错误的)。
        【解决方案4】:

        是的,you can。只需使用label 参数:

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

        或在 Meta 类中定义它:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-19
          • 2011-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-05
          • 1970-01-01
          相关资源
          最近更新 更多