5  Event App

5.1 Event Model

Define the Event Model

crm/models.py
# Add these lines
class Event(models.Model):
    name = models.CharField(max_length=200)
    time = models.DateTimeField()
    location = models.CharField(max_length=200)
    description = models.TextField()
    link = models.URLField(blank=True, null=True)

    def __str__(self):
        return self.name

Make Migrations and Migrate

python manage.py makemigrations
python manage.py migrate

Register the Event Model in the Admin Interface

crm/admin.py
# Update the file
from django.contrib import admin
from .models import Record, Event

admin.site.register(Record)
admin.site.register(Event)
crm/views.py
# Add these lines
from django.shortcuts import render
from .models import Event

def event_list(request):
    events = Event.objects.all()
    return render(request, 'crm/event_list.html', {"events": events})

Event List Template

{% extends 'base.html' %}

{% block content %}
    <h1>Event List</h1>
    <table class="table table-striped table-hover table-bordered">
        <thead class="table-dark">
        <tr>
            <th scope="col">Name</th>
            <th scope="col">Date and Time</th>
            <th scope="col">Location</th>
            <th scope="col">More Info</th>
        </tr>
        </thead>
        <tbody>
        {% if events %}
            {% for event in events %}
                <tr>
                    <td>{{ event.name }}</td>
                    <td>{{ event.time }}</td>
                    <td>{{ event.location }}</td>
                    <td>
                        {% if event.link %}
                            <a href="{{ event.link }}" class="btn btn-primary">View</a>
                        {% else %}
                            N/A
                        {% endif %}
                    </td>
                </tr>
            {% endfor %}
        {% else %}
            <tr>
                <td colspan="4">No events found.</td>
            </tr>
        {% endif %}
        </tbody>
    </table>
{% endblock %}

Update URL Dispatcher Configuration

crm/urls.py
# Update the file
from django.urls import path
from . import views

urlpatterns = [
    # ...
    path('events/', views.event_list, name='event_list'),
]

Update Navbar

<!-- Navigation bar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="container-fluid">
        <!-- Brand name and link to home -->
        <a class="navbar-brand" href="{% url 'home' %}">Django CRM</a>
        <!-- Button for toggling the navbar on small screens -->
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
                aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <!-- Navbar content -->
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li class="nav-item"><a class="nav-link" href="{% url 'event_list' %}">Events</a></li>  <!-- always show Events -->
                {% if not user.is_authenticated %}
                    <li class="nav-item"><a class="nav-link" href="{% url 'login' %}">Login</a></li>
                {% else %}
                    <li class="nav-item"><a class="nav-link" href="{% url 'record_list' %}">Records</a></li>
                    <li class="nav-item">
                        <form id="logout-form" method="post" action="{% url 'logout' %}">
                            {% csrf_token %}
                            <button type="submit" class="btn btn-link nav-link">Logout</button>
                        </form>
                    </li>
                {% endif %}
            </ul>
            <ul class="navbar-nav ml-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <span class="navbar-text">Hello {{ user.get_username }}</span>
                </li>
            </ul>
        </div>
    </div>
</nav>

Result