๐ŸŽฏ 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:

๐Ÿ‘‰ 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:

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: