如何通过单击按钮在后台提交Django表单?

时间:2019-01-29 11:57:18

标签: django django-models django-forms

我正在使用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 :(得分:0)

在这种情况下,您可以使用jQueryAJAX。我建议如下:

urls.py

创建用于注册/参与的网址,该网址将通过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 User对象具有一对一的关系