How to hide default label Django Model forms?

Viewed 1469

When I use the model forms, with {{form}} tag, I get a default label filed, for each element. Can I remove that from meta class defination?

My Model class:

class message(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField(max_length=40)
    contact = models.IntegerField(max_length=15)
    message = models.CharField(max_length=1000,blank=True, null=True)

My form class:

class MessageForm(forms.ModelForm):
    class Meta:
        model = message
        fields = '__all__'

        widgets = {
            'name' : forms.TextInput(attrs={"value":"Name", "onfocus":"this.value = '';","onblur":"if (this.value == '')","required":""}),
            'email' : forms.TextInput(attrs={"value":"email", "onfocus":"this.value = '';","onblur":"if (this.value == '')","required":""}),
            'contact' : forms.TextInput(attrs={"value":"contact", "onfocus":"this.value = '';","onblur":"if (this.value == '')","required":""}),
            'message' : forms.Textarea(attrs={"value":"emmessage", "onfocus":"this.value = '';","onblur":"if (this.value == '')","required":""})
        }

HTML Code:

<div class="col-md-6 mail_right">
<form action="" method="post" >  {% csrf_token %}
    {{form}}                                    
</form>
</div>
2 Answers

There are multiple methods how to do that. But, why don't you put verbose_name in your model field definition with wished label, or if you leave it blank the label won't show.

So, in models.py:

start_date = models.DateField(verbose_name="Start date")

or

start_date = models.DateField(verbose_name="")

The other option is in forms.py:

email = forms.EmailField(label="")

Will that work for you?

Use labels -- (django doc) meta option as

class MessageForm(forms.ModelForm):
    class Meta:
        model = message
        fields = '__all__'
        labels = {
            "name": "UpdatedNameLabel",
            "email": "UpdatedEmailLabel"
        }
Related