Как отправить форму Django в фоновом режиме, нажав кнопку? - PullRequest
0 голосов
/ 29 января 2019

Я создаю сайт регистрации событий, используя django == 2.1.Я создал представления так, что администратор может создавать события, а студенты могут просматривать эти созданные события и нажимать кнопку, чтобы участвовать в них.У меня есть все детали вошедшего в систему студента.Если студент нажимает кнопку участия, я хочу, чтобы его свиток и название события (на странице сведений о котором он нажал кнопку) были сохранены в приведенной ниже модели EventParticipants:

class EventParticipants(models.Model):
    event_name = models.ForeignKey(Event, on_delete=models.CASCADE)
    participant_roll = models.ForeignKey(
        Student, on_delete=models.CASCADE, to_field='roll')

    def get_absolute_url(self):
        return reverse('dashboard')

ТекущийРеализация, которую я имею, переносит студента на другую страницу, где он должен нажать другую кнопку, чтобы подтвердить свою регистрацию и отправить форму.Как я могу сохранить данные в модели, не перенаправляя пользователя?

1 Ответ

0 голосов
/ 29 января 2019

В этом случае вы можете использовать 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 по умолчанию.объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...