В этом случае вы можете использовать jQuery
и AJAX
.Я хотел бы предложить следующее:
urls.py
Создать URL для регистрации / участия, который будет вызываться через пример запроса AJAX:
urlpatterns [
...
path('participate-in-event/<int:event_id>/', Participate.as_view(), name='participate'),
...
]
views.py
from django.views import View
class Participate(View):
def get(self, request, event_id)
event = Event.objects.get(id=event_id)
if request.is_ajax():
try:
enrollment = EventParticipants.objects.create(event_name=event, participant_roll=request.user.student)
return JsonResponse({'enrolled': 1, 'message': 'Successfully enrolled', 'event':event.name}, status=200)
except Exception as ex:
return JsonResponse({'enrolled': 0, 'messsage': str(ex), 'event': event.name}, status=403)
html
В шаблоне, в котором перечислены события, вы можете перечислить их, как в следующем примере (но вы не ограничены только этим, это просто другой способ, вы можетеизмените, как вы хотите.
{% for event in events %}
<h1>{{ event.name }}</h1>
<a class='participate-link' href='javascript:void(0)' data-url="{{ url 'participate' event.id }}"> Participate in this event</a>
{% endfor %}
...
<!-- include jquery here -->
<script type='text/javascript'>
$(function(){
$('.participate-link').bind('click', function(){
$.ajax({
url: $(this).attr('data-url'),
type: 'get',
dataType: 'json'
data: {},
success: function(response){
alert(repsonse.message + 'Event: ' + response.event);
},
fail: function(data){alert(data.message)}
});
});
});
Примечание: В представлении Participate()
я предположил, что модель студента имеет отношение один к одному с пользователем django по умолчанию.объект