django - 如何通过单击按钮在后台提交 Django 表单?
问题描述
我正在使用 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')
我当前的实现将学生带到另一个页面,他必须单击另一个按钮来确认他的注册并提交表格。如何在不重定向用户的情况下将数据存储在模型中?
解决方案
在这种情况下,您可以使用jQuery
and 。AJAX
我建议如下:
网址.py
创建一个用于注册/参与的 url,它将通过 AJAX 请求示例调用:
urlpatterns [
...
path('participate-in-event/<int:event_id>/', Participate.as_view(), name='participate'),
...
]
视图.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 对象具有一对一的关系
推荐阅读
- laravel - Laravel 任务调度 - 什么时候开始执行
- ip-address - getaddrinfo() 使用 ESP32 zephyr SDK 返回 -2
- java - 为什么将“/”附加到 base-href 会消除部署 url 的需要?
- ios - 当某些角总是圆角时,在 Swift 中为 maskedCorners 设置动画?
- ms-access-2010 - 如何在表单视图中截取 MSAccess ControlTip 文本的屏幕截图
- heroku - 附加(未创建)Heroku 附加组件时是否有 Heroku webhook?
- python-3.x - 是否可以使用正则表达式或其他方法转换为 postgresql?
- node.js - ExpressJs在长时间处理后重试查询
- sql - 时间段SQL视图
- javascript - 想要通过在按钮中使用 if/else 条件来调用函数(React)