簡體   English   中英

Django:如何使用ModelForm隱藏/覆蓋默認標簽?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM