Django
Beginner
1 min read
Rendering Forms and Handling File Uploads
Example
# blog/models.py — model with image upload
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
cover_img = models.ImageField(upload_to='posts/%Y/%m/', blank=True, null=True)
# blog/forms.py — form with file field
from django import forms
from .models import Post
class PostWithImageForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'body', 'cover_img']
# blog/views.py — handling file upload
from django.shortcuts import render, redirect
from .forms import PostWithImageForm
def post_create(request):
if request.method == 'POST':
# Must pass request.FILES for file uploads
form = PostWithImageForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('blog:post-detail', pk=post.pk)
else:
form = PostWithImageForm()
return render(request, 'blog/post_form.html', {'form': form})
# mysite/settings.py — media file settings
# MEDIA_ROOT = BASE_DIR / 'media'
# MEDIA_URL = '/media/'
# mysite/urls.py — serve media in development
# from django.conf import settings
# from django.conf.urls.static import static
# urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Related Resources
Django Reference
Complete tag & property list
Django How-To Guides
Step-by-step practical guides
Django Exercises
Practice what you've learned
More in Django