views:

558

answers:

2

Say I have this simple form:

class ContactForm(forms.Form):
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

And I have a default value for one field but not the other. So I set it up like this:

default_data = {'first_name','greg'}
form1=ContactForm(default_data)

However now when I go to display it, Django shows a validation error saying last_name is required:

print form1.as_table()

What is the correct way to do this? Since this isn't data the user has submitted, just data I want to prefill.

Note: required=False will not work because I do want it required when the user submits the data. Just when I'm first showing the form on the page, I won't have a default value.

A: 

From the django docs is this:

from django import forms
class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

The "required=False" should produce the effect you're after.

Jack M.
Well I do want it required when the user submits the data. Just when I'm first showing the form on the page, I won't have a default value. (updated question with this)
Greg
+7  A: 

Form constructor has initial param that allows to provide default values for fields.

Alex Koshelev
Default means what to do when the user's done nothing. Empty and required would be in conflict. Initial means what to seed the form with, even if it won't pass validation later.
S.Lott