Set a Default Value for a Field in a Django Model
Last Updated :
23 Jul, 2025
Django is a powerful web framework for building web applications in Python. One common task in Django is setting up models, which are classes that represent database tables. Sometimes, it's useful to have default values for certain fields in these models. This article will guide you through creating a small Django project, including setting a default value for a field in a Django model. We will cover the necessary files and code to achieve this.
Set a Default Value for a Date Field in a Django Model
To illustrate how to set a default value for a field, let's create a simple Django project. We will create an app called blog with a model named Post that includes a title, content, and a published_date with a default value.
1. Setting Up the Django Project
First, make sure you have Django installed. If not, you can install it using pip:
pip install django
Next, create a new Django project and navigate into the project directory:
django-admin startproject mysite
cd mysite
2. Creating the Blog App
Create a new app within the project:
python manage.py startapp blog
To include our new blog app in the Django project, we need to add it to the INSTALLED_APPS list in mysite/settings.py:
settings.py (mysite/settings.py):
INSTALLED_APPS = [
...
'blog',
...
]
File Structure
Now, let's define the model for our app.
3. Defining the Post Model
In the blog app, we will define a Post model. This model will have three fields: title, content, and published_date. We will set a default value for published_date using Django's timezone.now function.
In this model:
- title is a CharField to store the post's title.
- content is a TextField for the post's content.
- published_date is a DateTimeField with a default value set to the current date and time using timezone.now.
Python
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
4. Applying the Migrations
To create the corresponding database table for the Post model, we need to create and apply migrations:
python manage.py makemigrations
python manage.py migrate
These commands create the necessary database schema changes and apply them. create superuser using the below command and add the data in database.
python manage.py createsuperuser
and add the data as in below shows data yellow color box cover data is we set as default this way we can set default value.
5. Creating a View and Template for the Post Model
To display the posts, we need to create a view and a corresponding template.
views.py (blog/views.py):
Python
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'post_list.html', {'posts': posts})
urls.py (blog/urls.py):
Python
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
Include the blog's URLs in the main project's URL configuration:
urls.py (mysite/urls.py):
Python
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
Template (blog/templates/post_list.html):
This template will list all the posts along with their titles and published dates.
HTML
<!DOCTYPE html>
<html>
<head>
<title>Blog</title>
<style>
body {
font-family: Verdana, Geneva, Tahoma, sans-serif;
background-color: #f4f4f4;
}
.container {
width: 40%;
margin: 0 auto;
padding: 20px;
background-color: #fff;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
border-radius: 8px;
margin-left: 20px;
margin-top: 20px;
}
h1 {
color: #333;
text-align: center;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
ul {
list-style-type: none;
padding: 0;
}
li {
padding: 15px;
margin: 10px 0;
background-color: #f9f9f9;
border: 1px solid #ddd;
border-radius: 5px;
}
li:nth-child(odd) {
background-color: #e9e9e9;
}
.post-title {
font-weight: bold;
color: #555;
cursor: pointer;
}
.post-date {
font-size: 0.9em;
color:black;
float: right;
}
.post-content {
color: gray;
font-family: Verdana, Geneva, Tahoma, sans-serif;
margin-bottom: -8px;
width: 57%;
}
</style>
</head>
<body>
<div class="container">
<h1><strong style="color: green; font-family: Verdana, Geneva, Tahoma, sans-serif;">GeeksforGeeks</strong> Blog Posts</h1>
<ul>
{% for post in posts %}
<li>
<span class="post-title">{{ post.title }}</span>
<span class="post-date">{{ post.published_date }}</span>
<p class="post-content">{{ post.content }}</p>
</li>
{% endfor %}
</ul>
</div>
</body>
</html>
7. Running the Development Server
Start the Django development server to see the app in action:
python manage.py runserver
Navigate to http://127.0.0.1:8000/ in your web browser. You should see a list of posts with their titles and published dates.
Conclusion
Setting a default value for a field in a Django model is a simple yet powerful feature that helps ensure consistent data in your database. In this article, we created a small Django project with a Post model, demonstrating how to set a default value for the published_date field using Django's timezone.now. This approach can be applied to various data types and scenarios in Django models.
By following these steps, you can easily create and manage Django models with default values, making your web application more robust and easier to maintain.
Explore
Python Fundamentals
Python Data Structures
Advanced Python
Data Science with Python
Web Development with Python
Python Practice