MorganFreeFarm
MorganFreeFarm

Reputation: 3723

Are Django model forms are required by default and how to set required to false for whole form?

models.py:

class Venue(models.Model):
    author = models.ForeignKey(ProfileUser, on_delete=models.CASCADE)
    title = models.CharField(max_length=300)
    city = models.ForeignKey(City, on_delete=models.CASCADE)
    address = models.CharField(max_length=300)
    phone = models.CharField(max_length=20, default='')
    email = models.CharField(max_length=100, default='')
    site = models.CharField(max_length=100, default='')
    facebook = models.CharField(max_length=100, default='')
    instagram = models.CharField(max_length=100, default='')
    content = models.TextField()
    rating = models.DecimalField(default=10.0, max_digits=5, decimal_places=2)
    created_date = models.DateTimeField(default=timezone.now)
    approved_venue = models.BooleanField(default=False)
    admin_seen = models.BooleanField(default=False)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.title}"

forms.py

class VenueForm(forms.ModelForm):
    class Meta:
        model = Venue
        fields = [
            'title',
            'content',
            'city',
            'address',
            'phone',
            'email',
            'site',
            'facebook',
            'instagram',
        ]

    def __init__(self, *args, **kwargs):
        super(VenueForm, self).__init__(*args, **kwargs)
        self.fields['title'].label = "Име"
        self.fields['content'].label = 'Описание'
        self.fields['city'].label = 'Град'
        self.fields['address'].label = 'Адрес'
        self.fields['phone'].label = 'Телефон'
        self.fields['email'].label = 'E-mail'
        self.fields['site'].label = 'Сайт'

html render:

<form method="post" id="dialog_addVenue_part" enctype="multipart/form-data">
    {% csrf_token %}
    {% for hidden in postForm.hidden_fields %}
        {{ hidden }}
    {% endfor %}
    {% for field in form %}
        <div class="fieldWrapper">
            <div class="errorcode{{field.html_name}}">
                {{ field.errors }}
            </div>
            {{ field.label_tag }} {{ field }}
            {% if field.help_text %}
            <p class="help">{{ field.help_text|safe }}</p>
            {% endif %}
        </div>
    {% endfor %}
    <div id="map" style="height: 500px;">

    </div>
    <div class="utf_addVenue_form">
        <button type="submit" value="Изпрати">Изпрати</button>
    </div>
</form>

Part of HTML with required fields:

    <div class="fieldWrapper">
        <div class="errorcodesite">

        </div>
        <label for="id_site">Сайт:</label> <input type="text" name="site" maxlength="100" required="" id="id_site">

</div>

<div class="fieldWrapper">
    <div class="errorcodefacebook">

    </div>
    <label for="id_facebook">Facebook:</label> <input type="text" name="facebook" maxlength="100" required="" id="id_facebook">

</div>

I have not indicated anywhere that form should have "required" to all fields but they comes with it. So, Are Django model forms are required by default and how to set required to false for whole form?

Upvotes: 0

Views: 673

Answers (1)

Harben
Harben

Reputation: 1856

Add blank=True to the fields you don't need to be required.

class Venue(models.Model):
    . . .
    title = models.CharField(max_length=300, blank=True)
    . . .

Upvotes: 1

Related Questions