Django

College Event Registration Website

CampusConnect Introduction and Setup Configuring settings file for template, static and media files Setting up Tailwind Creating Custom User Model Creating Super User for CampusConnect Registering Custom User Model Search and Filter for User Model Serving Media Files During Development Categorizing Departments Linking Department with HOD Creating Abstract Model for Event Creating Model for Workshop Customizing Admin Page for Workshop Update in Model AbstractEvent Adding Instructor for Workshop Instructor Model Admin Page Adding Poster Field in Abstract Event Providing Access to HOD Access Update for HOD Restricting HOD Access to Particular Department AbstractEvent On Spot Registration Field Creating Workshop Object Creating and Linking Home Page Displaying Workshop on Home Page Styling Home Page Adding Workshop Detail Page Link Workshop Detail Page Workshop Detail Page Styling Workshop Instructor Details Workshop Detail Contact Contact Admin Page Many to Many Field for Contact Displaying Contact on Workshop Detail Page Adding Title for Workshop Detail Page Adding Gallery for Workshop Workshop Gallery Admin Page Displaying Gallery Images on Website Through Context Displaying Gallery Images on Website through template tags Authentication for users User Registration User Registration Submission Logout Functionality For User Login Functionality for User Model For Workshop Registration Workshop Registration Admin Page Register Workshop Function Register Button in Workshop Page Validations Before Workshop Registration Workshop Registration Closed Validaiton User Already Registered for Workshop Validation Workshop Registration Report From Admin Page Export using Library in Django Admin Extending Abstract Event for Hackathons

User Already Registered for Workshop Validation

Before allowing a user to register for a particular workshop, we also need to check wethere the user has already registered for the workshop or not. In order to achieve this, we shall add a template tag inside the workshop_tags.py and add a logic to check wether a user is already registered or not.

from event.models import Workshopregistration

@register.simple_tag
def user_already_registered(workshop, user):
    try:
        return Workshopregistration.objects.filter(student=user, workshop=workshop).exists()
    except:
        return False

This checks wether the user is already registered for the workshop or not and return True or False based on it.

Now, this can be stored on a variable in the workshop_detail template, and it can be used to display a message accordingly.

Inside the workshop_detail.html file :

{% if not workshop.is_registration_open %}
    <div class="text-center mt-4">
        <button class="bg-gray-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
            The workshop Registration is not open yet !!.
        </button>
    </div>

{% elif workshop.is_registration_closed %}
    <div class="text-center mt-4">
        <button class="bg-gray-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
            The Registration for the Workshop has been closed.
        </button>
    </div>
{% else %}
    {% user_already_registered workshop user as is_registered %}
    {% if is_registered %}
        <div class="text-center mt-4">
            <button class="bg-gray-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
                Already Registered
            </button>
        </div>
    {% else %}
        <div class="text-center mt-4">
            <form method="post" action="{% url 'register_workshop' workshop_slug=workshop.slug %}">
                {% csrf_token %}
                <button type="submit" class="bg-blue-500 hover:bg-blue-700 text-white text-xl font-semibold py-2 px-4 rounded-md transition-colors duration-300">
                    Register
                </button>
            </form>
        </div>
    {% endif %}
{% endif %}

Now, it would also check for wether the user has already been registered and display the register button accordingly. alt text Now, still there is a problem here. If the workshop reaches max registrations it would display as registrations closed instead of registered. This can be handled by changing the order of the conditions.

So in the workshop_detail template :

{% user_already_registered workshop user as is_registered %}
{% if is_registered %}
    <div class="text-center mt-4">
        <button class="bg-green-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
            Already Registered
        </button>
    </div>
{% elif not workshop.is_registration_open %}
    <div class="text-center mt-4">
        <button class="bg-gray-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
            The workshop Registration is not open yet !!.
        </button>
    </div>

{% elif workshop.is_registration_closed %}
    <div class="text-center mt-4">
        <button class="bg-gray-500 text-white font-semibold py-2 px-4 rounded-md cursor-not-allowed" disabled>
            The Registration for the Workshop has been closed.
        </button>
    </div>
{% else %}
    <div class="text-center mt-4">
        <form method="post" action="{% url 'register_workshop' workshop_slug=workshop.slug %}">
            {% csrf_token %}
            <button type="submit" class="bg-blue-500 hover:bg-blue-700 text-white text-xl font-semibold py-2 px-4 rounded-md transition-colors duration-300">
                Register
            </button>
        </form>
    </div>
{% endif %}

Also, the colour of the button can be changed to green. Now even if the registration is closed, it will show registered if the user has already done the registration for a particular workshop. alt text