Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Form class definition
📖 Scenario: You are building a simple contact form for a website using Django. The form will collect a user's name and email address.
🎯 Goal: Create a Django form class that defines two fields: name and email.
📋 What You'll Learn
Create a Django form class named ContactForm
Add a name field of type CharField with a maximum length of 100
Add an email field of type EmailField
💡 Why This Matters
🌍 Real World
Forms are used on websites to collect user input like contact details or feedback.
💼 Career
Knowing how to create Django form classes is essential for backend web development with Django.
Progress0 / 4 steps
1
Import Django forms module
Write the import statement to import forms from django.
Django
Hint
Use from django import forms to import the forms module.
2
Define ContactForm class
Define a class named ContactForm that inherits from forms.Form.
Django
Hint
Use class ContactForm(forms.Form): to define the form class.
3
Add name field
Inside the ContactForm class, add a name field using forms.CharField with max_length=100.
Django
Hint
Use name = forms.CharField(max_length=100) inside the class.
4
Add email field
Inside the ContactForm class, add an email field using forms.EmailField.
Django
Hint
Use email = forms.EmailField() inside the class.
Practice
(1/5)
1. What is the main purpose of defining a form class in Django?
easy
A. To write JavaScript code for user interaction
B. To define database tables automatically
C. To style HTML pages with CSS
D. To create a reusable structure for user input fields and validation
Solution
Step 1: Understand what a Django form class does
A Django form class defines fields and validation rules for user input, making form handling easier.
Step 2: Compare options with this purpose
Only To create a reusable structure for user input fields and validation describes creating reusable input fields and validation, which is the main purpose.
Final Answer:
To create a reusable structure for user input fields and validation -> Option D
Quick Check:
Form class purpose = reusable input and validation [OK]
Hint: Form classes handle input and validation, not styling or DB [OK]
Common Mistakes:
Confusing form classes with database models
Thinking form classes handle page styling
Assuming form classes write JavaScript
2. Which of the following is the correct way to define a simple Django form class with a single text field named name?
easy
A. def MyForm():
name = CharField()
B. class MyForm(forms.Form):
name = forms.CharField()
C. class MyForm(forms.Model):
name = models.CharField()
D. class MyForm(forms.Form):
name = CharField
Solution
Step 1: Identify correct base class and field syntax
Django form classes inherit from forms.Form and fields use forms.FieldType(), so forms.CharField() is correct.
Step 2: Check each option
class MyForm(forms.Form):
name = forms.CharField() uses forms.Form and forms.CharField() correctly. Others use wrong base class, missing parentheses, or wrong imports.
Final Answer:
class MyForm(forms.Form):
name = forms.CharField() -> Option B
Quick Check:
Form class inherits forms.Form and fields use forms.Field() [OK]
Hint: Use forms.Form base and fields with parentheses [OK]
Common Mistakes:
Using models.Model instead of forms.Form
Forgetting parentheses after field type
Defining form as a function instead of a class
3. Given this form class definition, what will form.is_valid() return if the submitted data is {'age': '25'}?
from django import forms
class AgeForm(forms.Form):
age = forms.IntegerField(min_value=18, max_value=30)
form = AgeForm(data={'age': '25'})
valid = form.is_valid()
medium
A. True
B. False
C. Raises a TypeError
D. None
Solution
Step 1: Check field type and validation rules
The age field is an IntegerField with min 18 and max 30, so '25' as string converts to integer 25, which is valid.
Step 2: Understand form.is_valid() behavior
Since the data meets the validation rules, form.is_valid() returns True.
Final Answer:
True -> Option A
Quick Check:
Valid integer in range = True [OK]
Hint: IntegerField converts strings if valid number [OK]
Common Mistakes:
Thinking string input causes error
Assuming is_valid returns data instead of boolean
Ignoring min_value and max_value constraints
4. Identify the error in this Django form class definition:
from django import forms
class ContactForm(forms.Form):
email = forms.EmailField
message = forms.CharField(widget=forms.Textarea)
medium
A. TextArea widget is invalid
B. forms.Form should be models.Form
C. Missing parentheses after EmailField
D. message field must be an EmailField
Solution
Step 1: Check field definitions for syntax
Fields must be assigned with field instances, so EmailField() requires parentheses.
Step 2: Verify other parts
Textarea widget is valid, forms.Form is correct base, and message can be CharField.
Final Answer:
Missing parentheses after EmailField -> Option C
Quick Check:
Field types need parentheses to create instances [OK]
Hint: Always add () after field types to create instances [OK]
Common Mistakes:
Omitting parentheses after field classes
Confusing widget names capitalization
Using models.Form instead of forms.Form
5. You want to create a Django form class that only accepts a username if it starts with a letter and is at least 5 characters long. Which of these definitions correctly implements this using a custom validation method?
hard
A. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
raise forms.ValidationError('Must start with a letter')
return data
B. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
raise forms.ValidationError('Must start with a letter')
return data
C. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if data[0].isdigit():
raise forms.ValidationError('Must start with a letter')
return data
D. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
return forms.ValidationError('Must start with a letter')
return data
Solution
Step 1: Understand custom field validation method
To validate a single field, define clean_fieldname method that raises ValidationError on invalid data.
Step 2: Check each option's validation logic
class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
raise forms.ValidationError('Must start with a letter')
return data correctly checks if first character is a letter and raises ValidationError properly. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
raise forms.ValidationError('Must start with a letter')
return data uses clean() which is for whole form, not single field. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if data[0].isdigit():
raise forms.ValidationError('Must start with a letter')
return data wrongly checks if first char is digit instead of not letter. class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
return forms.ValidationError('Must start with a letter')
return data returns ValidationError instead of raising it.
Final Answer:
class UsernameForm(forms.Form):
username = forms.CharField(min_length=5)
def clean_username(self):
data = self.cleaned_data['username']
if not data[0].isalpha():
raise forms.ValidationError('Must start with a letter')
return data -> Option A
Quick Check:
Use clean_fieldname and raise ValidationError [OK]
Hint: Use clean_fieldname and raise ValidationError, not return it [OK]
Common Mistakes:
Using clean() instead of clean_fieldname for single field