Django Tutorial Part 5: User Dashboard and Content Management (2025 Beginner Guide)
In Part 4, we built user profiles and assigned permissions. Now, it’s time to give users their own dashboard to manage content. Each user will be able to view, edit, and delete only their own posts.
What You’ll Learn
- Create a personal dashboard for logged-in users
- Filter content based on logged-in user
- Add update and delete functionality
- Secure views so users can’t edit others’ data
Step 1: Filter Posts by Logged-in User
Inviews.py:
from django.contrib.auth.decorators import login_required
from .models import Post
@login_required
def dashboard(request):
user_posts = Post.objects.filter(author=request.user)
return render(request, 'myapp/dashboard.html', {'posts': user_posts})
Step 2: Add Author Field to Post Model
Inmodels.py:
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
Run:
python manage.py makemigrations
python manage.py migrate
Step 3: Modify Post Creation to Set Author
In your create view:def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('dashboard')
else:
form = PostForm()
return render(request, 'myapp/create_post.html', {'form': form})
Step 4: Create Dashboard Template
Intemplates/myapp/dashboard.html:
<h2>My Posts</h2>
<a href="{% url 'create_post' %}">Create New Post</a>
{% for post in posts %}
<div>
<h3>{{ post.title }}</h3>
<a href="{% url 'edit_post' post.id %}">Edit</a> |
<a href="{% url 'delete_post' post.id %}">Delete</a>
</div>
{% empty %}
<p>No posts yet.</p>
{% endfor %}
Step 5: Add Edit and Delete Views
Inviews.py:
from django.shortcuts import get_object_or_404
@login_required
def edit_post(request, pk):
post = get_object_or_404(Post, pk=pk, author=request.user)
form = PostForm(request.POST or None, instance=post)
if form.is_valid():
form.save()
return redirect('dashboard')
return render(request, 'myapp/edit_post.html', {'form': form})
@login_required
def delete_post(request, pk):
post = get_object_or_404(Post, pk=pk, author=request.user)
if request.method == 'POST':
post.delete()
return redirect('dashboard')
return render(request, 'myapp/delete_post.html', {'post': post})
Step 6: Add URLs
Inmyapp/urls.py:
path('dashboard/', views.dashboard, name='dashboard'),
path('edit/<int:pk>/', views.edit_post, name='edit_post'),
path('delete/<int:pk>/', views.delete_post, name='delete_post'),
Step 7: Create Edit and Delete Templates
edit_post.html:<h2>Edit Post</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save Changes</button>
</form>
delete_post.html:
<h2>Are you sure you want to delete "{{ post.title }}"?</h2>
<form method="POST">
{% csrf_token %}
<button type="submit">Yes, Delete</button>
<a href="{% url 'dashboard' %}">Cancel</a>
</form>
Conclusion
You’ve successfully created a user dashboard where authenticated users can manage their own content. This is a crucial step toward building real-world apps like blogs, portals, or admin panels. Coming in Part 6: Learn how to upload and display media files like images and documents!
django user dashboard
django tutorial part 5
django content management
django user post edit
django user delete post
django dashboard view
django restrict content
django auth dashboard
django user-specific data
django dashboard tutorial
django beginner cms
django user blog
django my account page
django edit content
django delete post view
django class-based dashboard
django posts by user
django login user content
django secure content management