Есть ли в Django способ ограничить пользователя в регистрации на событие только один раз?
Я новичок в Django, пытаюсь создать сайт, позволяющий людям регистрироваться на футбольные матчи.
На данный момент пользователь может зарегистрироваться несколько раз на один и тот же матч, что, очевидно, не идеально! Есть ли способ определить, зарегистрировался ли уже пользователь, вошедший в систему, и заменить кнопку регистрации сообщением о том, что он уже зарегистрировался? Я предполагаю, что мне нужно какое-то булево значение в представлении EventDetail, а затем я могу сделать условный оператор в шаблоне, но я не знаю, как это реализовать. Надеюсь, вопрос понятен, это мой самый первый пост!
views.py:
class EventDetail(View):
def get(self, request, id, *args, **kwargs):
event = get_object_or_404(Event, pk=id)
registrations = Registration.objects.filter(event=event)
total_participants = 0
for person in registrations:
total_participants += 1
if person.guest:
total_participants += 1
remaining_spaces = event.max_participants - total_participants
template = "event_detail.html"
context = {
"event": event,
"total_participants": total_participants,
"registrations": registrations,
"remaining_spaces": remaining_spaces,
}
return render(request, template, context)
шаблон
{% extends "base.html" %}
{% block content %}
<p>{{ event.title }}</p>
<p>{{ total_participants }} / {{ event.max_participants }} ({{ remaining_spaces }} spot{{ remaining_spaces|pluralize }}
remaining!)</p>
{% if total_participants < event.max_participants %}
<a href="{% url 'event_registration' event.id %}" class="btn">Register</a>
{% else %}
<p>This event has filled up.</p>
{% endif %}
<h2>Current Participants</h2>
<ul>
{% for person in registrations %}
<li>
{{ person.name }}
{% if person.guest %}
+1
{% endif %}
</li>
{% endfor %}
</ul>
{% endblock %}