web-dev-qa-db-ja.com

モデルフォームラベルを変更してカスタム名を付ける方法

モデルフォームのラベルのカスタム名を作成したいのですが、これは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"
         ]

ビデオの代わりに埋め込みを変更したいと思います。私はドキュメントをチェックしましたが、私がそれをするのを助ける何かを見つけませんでした。モデルを再配置しなくても可能ですか?もしそうならどのように?ありがとう

23
nothingness

ドキュメント から:

labelshelp_textsおよびerror_messagesフィールドをさらにカスタマイズする場合は、内部Metaクラスの属性。

ドキュメントのそのセクションのすぐ下に例があります。そのため、次のことができます。

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

はい、 できます 。単にlabel引数を使用します:

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

またはMetaクラス内で定義します:

class PostForm(forms.ModelForm):
    ...
    class Meta:
        ...
        labels = {
            "video": "embed"
            ...
        }
14
Selcuk
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'}),
    } 
1
Thiago Pires

フォームを編集せずにこれを達成する簡単な方法は、 change the verbose_name モデル上。モデルのvideoフィールドでは、次のようにフォームのラベルを「video」から「embed」に変更できます。

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