将 django 信号连接到按钮单击
Connecting django signal to a button click
我正在尝试使用 Django 信号在单击按钮时将模型的布尔值从 True 切换为 False。我认为 Django 发送者是按钮点击,接收者是改变布尔值的函数。但是,我不确定如何将按钮点击写成信号发送器。
这是我的布尔值模型。
来自models.py:
class User(AbstractUser):
is_blue = models.BooleanField(default=False)
有没有想过单击按钮并将此值更改为 True 后的信号是什么样子的?
要更改模型字段,您需要在视图中为其创建一个单独的函数,例如:
from django.http import JsonResponse
from xxx.models import User
def ajax_change_user(request):
is_blue= request.GET.get('is_blue', False)
# Get your User model
user = User.objects.get(pk=user_id)
try:
is_blue = True
user.save()
return JsonResponse({"success": True})
except Exception as e:
return JsonResponse({"success": False})
return JsonResponse(data)
那么你需要为这个视图添加一个url:
path('ajax/change_user', views.ajax_change_user, name='ajax_change_user')
然后在你的html中,你需要添加一个带有必要class的标签,例如:
{% csrf_token %}
<a href="javascript:" class="change-user btn" data-userid="{{user.pk}}">Change</a>
最后 javascript 和 ajax 调用部分:
<script>
$(".change-user").on('click', function () {
var user_id = $(this).data('userid);
var is_blue = False # say you start with the status being false
$.ajax({
url: '/ajax/change_user/',
data: {
'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
'is_blue': is_blue
'user_id': user_id
},
dataType: 'json',
success: function (data) {
if (data.success) {
alert("ajax call was successful.");
is_blue = True # if button is clicked, make 'is_blue' True
}else{
alert("ajax call was not successful.");
}
}
});
});
</script>
这只是一个入门示例,您需要对其进行更改以满足您的需要。例如,您可以在 ajax 调用之前添加一个 if 语句来检查 is_blue
是否为真,以便您可以切换值。
我正在尝试使用 Django 信号在单击按钮时将模型的布尔值从 True 切换为 False。我认为 Django 发送者是按钮点击,接收者是改变布尔值的函数。但是,我不确定如何将按钮点击写成信号发送器。
这是我的布尔值模型。
来自models.py:
class User(AbstractUser):
is_blue = models.BooleanField(default=False)
有没有想过单击按钮并将此值更改为 True 后的信号是什么样子的?
要更改模型字段,您需要在视图中为其创建一个单独的函数,例如:
from django.http import JsonResponse
from xxx.models import User
def ajax_change_user(request):
is_blue= request.GET.get('is_blue', False)
# Get your User model
user = User.objects.get(pk=user_id)
try:
is_blue = True
user.save()
return JsonResponse({"success": True})
except Exception as e:
return JsonResponse({"success": False})
return JsonResponse(data)
那么你需要为这个视图添加一个url:
path('ajax/change_user', views.ajax_change_user, name='ajax_change_user')
然后在你的html中,你需要添加一个带有必要class的标签,例如:
{% csrf_token %}
<a href="javascript:" class="change-user btn" data-userid="{{user.pk}}">Change</a>
最后 javascript 和 ajax 调用部分:
<script>
$(".change-user").on('click', function () {
var user_id = $(this).data('userid);
var is_blue = False # say you start with the status being false
$.ajax({
url: '/ajax/change_user/',
data: {
'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
'is_blue': is_blue
'user_id': user_id
},
dataType: 'json',
success: function (data) {
if (data.success) {
alert("ajax call was successful.");
is_blue = True # if button is clicked, make 'is_blue' True
}else{
alert("ajax call was not successful.");
}
}
});
});
</script>
这只是一个入门示例,您需要对其进行更改以满足您的需要。例如,您可以在 ajax 调用之前添加一个 if 语句来检查 is_blue
是否为真,以便您可以切换值。