Bird
Raised Fist0
Djangoframework~10 mins

Form class definition in Django - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the Django forms module.

Django
from django import [1]
Drag options to blanks, or click blank then click option'
Amodels
Bviews
Cadmin
Dforms
Attempts:
3 left
💡 Hint
Common Mistakes
Importing 'models' instead of 'forms'.
Forgetting to import the forms module.
2fill in blank
medium

Complete the code to define a form class named ContactForm inheriting from Django's base form class.

Django
class ContactForm([1]):
    pass
Drag options to blanks, or click blank then click option'
AHttpResponse
Bforms.Form
Cmodels.Model
Dviews.View
Attempts:
3 left
💡 Hint
Common Mistakes
Inheriting from 'models.Model' instead of 'forms.Form'.
Using unrelated base classes like 'HttpResponse'.
3fill in blank
hard

Fix the error in the form field definition to create a CharField with a max length of 100.

Django
class ContactForm(forms.Form):
    name = forms.CharField([1]=100)
Drag options to blanks, or click blank then click option'
Amax_length
Bmaxsize
Clength
Dsize
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'maxsize' or 'length' which are not valid arguments.
Omitting the max length argument.
4fill in blank
hard

Fill both blanks to define an EmailField with a required attribute set to True.

Django
class ContactForm(forms.Form):
    email = forms.[1](required=[2])
Drag options to blanks, or click blank then click option'
AEmailField
BTrue
CFalse
DCharField
Attempts:
3 left
💡 Hint
Common Mistakes
Using CharField instead of EmailField for emails.
Setting required to False when the field should be mandatory.
5fill in blank
hard

Fill all three blanks to define a form with a CharField named username, a PasswordInput widget, and a max length of 30.

Django
class UserForm(forms.Form):
    username = forms.[1](max_length=[2], widget=forms.[3]())
Drag options to blanks, or click blank then click option'
ACharField
B30
CPasswordInput
DEmailField
Attempts:
3 left
💡 Hint
Common Mistakes
Using EmailField instead of CharField for username.
Forgetting to set max_length or widget properly.

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

  1. 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.
  2. 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.
  3. Final Answer:

    To create a reusable structure for user input fields and validation -> Option D
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    class MyForm(forms.Form): name = forms.CharField() -> Option B
  4. 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

  1. 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.
  2. Step 2: Understand form.is_valid() behavior

    Since the data meets the validation rules, form.is_valid() returns True.
  3. Final Answer:

    True -> Option A
  4. 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

  1. Step 1: Check field definitions for syntax

    Fields must be assigned with field instances, so EmailField() requires parentheses.
  2. Step 2: Verify other parts

    Textarea widget is valid, forms.Form is correct base, and message can be CharField.
  3. Final Answer:

    Missing parentheses after EmailField -> Option C
  4. 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

  1. Step 1: Understand custom field validation method

    To validate a single field, define clean_fieldname method that raises ValidationError on invalid data.
  2. 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.
  3. 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
  4. 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
  • Returning ValidationError instead of raising it
  • Checking wrong condition for first character