🎯 Subject

Learn how to use Django Forms to handle user input, validate data, and connect forms with models to build interactive web applications.

🧠 1. What Is a Django Form?

A Django form is a tool that allows users to send data to your application (like filling a form on a website).

Examples:

  • contact form
  • login form
  • registration form
  • blog post creation form

πŸ‘‰ Forms are essential for user interaction.

πŸ”„ 2. How Forms Work

User β†’ fills form β†’ submits β†’ Django processes β†’ response

Steps:

  1. user fills input fields
  2. form sends data (POST request)
  3. Django validates data
  4. Django saves or processes data
  5. response is returned

🧩 3. Types of Django Forms

1️⃣ Form (Manual)

You define fields manually.

2️⃣ ModelForm (Automatic) βœ…

Django generates form from a model.

πŸ‘‰ For beginners β†’ use ModelForm

🧱 4. Creating Your First Form

πŸ“Œ blog/forms.py

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

🎯 5. Using the Form in a View

πŸ“Œ views.py

from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    form = ContactForm()
    return render(request, 'blog/contact.html', {'form': form})

🎨 6. Display Form in Template

πŸ“Œ contact.html

<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Send</button>
</form>

πŸ” 7. Why {% csrf_token %}?

Django protects forms from attacks.

πŸ‘‰ Always include:

{% csrf_token %}

πŸ“₯ 8. Handling Form Submission (POST)

Update your view:

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)

        if form.is_valid():
            data = form.cleaned_data
            print(data)  # process data

    else:
        form = ContactForm()

    return render(request, 'blog/contact.html', {'form': form})

🧠 9. Form Validation

Django automatically validates:

  • required fields
  • email format
  • max length

Example:

 

forms.EmailField()

 

πŸ‘‰ invalid email β†’ error automatically shown

🧾 10. Accessing Form Data

After validation:

form.cleaned_data

Example:

name = form.cleaned_data['name']

πŸ” 11. ModelForm (Most Important)

Instead of writing fields manually, Django can generate forms from models.

πŸ“Œ Example Model

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

πŸ“Œ Create ModelForm

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

πŸ’Ύ 12. Saving Form Data

In your view:

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)

        if form.is_valid():
            form.save()
    else:
        form = PostForm()

    return render(request, 'blog/form.html', {'form': form})

πŸ‘‰ form.save() β†’ saves to database

πŸ”„ 13. Update Existing Data

def update_post(request, id):
    post = Post.objects.get(id=id)

    form = PostForm(request.POST or None, instance=post)

    if form.is_valid():
        form.save()

    return render(request, 'blog/form.html', {'form': form})

🎨 14. Customize Form Fields

title = forms.CharField(
    max_length=200,
    widget=forms.TextInput(attrs={'class': 'form-control'})
)

❗ 15. Display Errors in Template

{{ form.errors }}

Or:

{{ form.field.errors }}

⚠️ 16. Common Mistakes

❌ Forgetting {% csrf_token %}
❌ Not checking form.is_valid()
❌ Using GET instead of POST
❌ Not passing request.POST
❌ Forgetting instance for update

🧠 17. Best Practices

βœ” Use ModelForm for database models
βœ” Always validate forms
βœ” Keep forms simple
βœ” Use POST for forms
βœ” Use clean UI

πŸ“Š 18. Summary

ConceptDescription
FormCollect user input
ModelFormAuto form from model
POSTSend data
is_valid()Validate
cleaned_dataAccess data
save()Store data

 

🎯 19. Conclusion

πŸ”₯ Forms are a major milestone in Django.

Now you can:

  • accept user input
  • build interactive apps
  • create real features (login, register, comments)