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.
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.