[英]Django: how to hide/overwrite default label with ModelForm?
我有以下內容,但為什么這不會隱藏書評的標簽? 我得到錯誤'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錯誤告訴你的內容。 在您擁有有效的表單字段之前,沒有必要擔心標簽。
解決方案是使用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',)
如果您正在使用Django 1.6+, field_classes
在ModelForm的元類中添加一些新的覆蓋,包括標簽和field_classes
。
請參閱: 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',)
。
出於這個原因,我通常只使用list: 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刪除它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.