14

私は以下を持っていますが、本のコメントのラベルを非表示にしないのはなぜですか? 「テキストフィールド」が定義されていないというエラーが表示されます。

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={''}),}  
4

6 に答える 6

18

上記の私のコメントを拡張すると、フォーム用の TextField はありません。それがあなたの TextField エラーがあなたに伝えていることです。有効なフォーム フィールドが作成されるまで、ラベルについて心配しても意味がありません。

解決策は、代わりに Forms.CharField を Textarea ウィジェットと共に使用することです。モデル フォーム ウィジェット オプションを使用することもできますが、フィールドを定義するときにウィジェットを設定する方が簡単です。

有効なフィールドがあれば、空白のラベルを設定する方法はすでにわかっています。フィールド定義で 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',)
于 2012-02-17T19:32:22.900 に答える
10

Django 1.6+ を使用している場合、ラベルやfield_classes.

参照: https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#overriding-the-default-fields

于 2013-12-31T18:21:28.443 に答える
1

exclude属性は反復可能(通常はリストまたはタプル)を取ります。しかし('book')、タプルではありません。Pythonの構文の癖のため、タプルにするためにコンマを追加する必要がありますexclude = ('book',)

このため、私は通常、リストを使用しますexclude = ['book']。(意味的には、とにかくここでリストを使用する方が理にかなっています。Djangoのドキュメントで代わりにタプルの使用が推奨されている理由はわかりません。)

于 2012-02-17T17:20:58.817 に答える
0

まず、フィールドをMetaクラスに入れます。実際に進む必要がありますModelForm。第二に、とにかく望ましい結果が得られません。HTML に空のラベル要素を出力するだけです。

ラベルを完全に削除したい場合は、フィールドを手動で確認し、ラベルを表示しないようにします。

{% for field in form %}
    {% if field.name != 'book_comment' %}
    {{ field.label }}
    {% endif %}
    {{ field }}
{% endfor %}

または、JavaScript を使用して削除してください。

于 2012-02-17T17:23:12.313 に答える