私は以下を持っていますが、なぜこれが本のコメントのラベルを隠さないのですか? 「textfield」が定義されていませんというエラーが表示されます。
from Django.db import models
from Django.forms import ModelForm, Textarea
class Booklog(models.Model):
Author = models.ForeignKey(Author)
Book_comment = models.TextField()
Bookcomment_date = models.DateTimeField(auto_now=True)
class BooklogForm(ModelForm):
#book_comment = TextField(label='')
class Meta:
model = Booklog
exclude = ('Author')
widgets = {'book_entry': Textarea(attrs={'cols': 45, 'rows': 5}, label={''}),}
上記の私のコメントを拡張するために、フォーム用のTextFieldはありません。それはあなたのTextFieldエラーがあなたに言っていることです。有効なフォームフィールドができるまで、ラベルについて心配する必要はありません。
解決策は、Textareaウィジェットで代わりにforms.CharFieldを使用することです。モデルフォームウィジェットオプションを使用することもできますが、フィールドを定義するときにウィジェットを設定する方が簡単です。
有効なフィールドができたら、空白のラベルを設定する方法をすでに知っています。フィールド定義でlabel = ''を使用するだけです。
# I prefer to importing Django.forms
# but import the fields etc individually
# if you prefer
from Django import forms
class BooklogForm(forms.ModelForm):
book_comment = forms.CharField(widget=forms.Textarea, label='')
class Meta:
model = Booklog
exclude = ('Author',)
Django 1.6+を使用している場合、ラベルやfield_classes
など、多数の新しいオーバーライドがModelFormのメタクラスに追加されました。
参照: https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields
ラベルだけを上書きするには、
def __init__(self, *args, **kwargs):
super(ModelForm, self).__init__(*args, **kwargs)
self.fields['my_field_name'].label = 'My New Title'
exclude
属性は反復可能(通常はリストまたはタプル)を取ります。ただし、_('book')
_はタプルではありません。 Pythonの構文の癖のため、タプルにするにはコンマを追加する必要があります:exclude = ('book',)
。
このため、私は通常、リスト_exclude = ['book']
_を使用します。 (意味的には、とにかくここでリストを使用する方が理にかなっています。Djangoのドキュメントが代わりにタプルの使用を推奨している理由はわかりません。)
以下の簡単な解決策を見つけました: https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields
基本的には、ラベル辞書を追加し、フォームメタクラスに必要な新しいラベルを入力するだけです。
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
まず、フィールドをMeta
クラスに配置します。実際のModelForm
に進む必要があります。第二に、それはとにかく望ましい結果をもたらさないでしょう。 HTMLに空のlabel要素を出力するだけです。
ラベルを完全に削除する場合は、手動でフィールドを確認し、ラベルを表示しないでください。
{% for field in form %}
{% if field.name != 'book_comment' %}
{{ field.label }}
{% endif %}
{{ field }}
{% endfor %}
または、JavaScriptを使用して削除します。