🎯 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)