【问题标题】:Connecting django signal to a button click将 django 信号连接到按钮单击
【发布时间】:2020-11-28 22:15:22
【问题描述】:

我正在尝试使用 Django 信号在单击按钮时将模型的布尔值从 True 切换为 False。我认为 Django 发送者将是按钮单击,接收者将是更改布尔值的函数。但是,我不确定如何将按钮单击写成信号发送者。

这是我的布尔值模型。

来自models.py:

class User(AbstractUser):
is_blue = models.BooleanField(default=False)

对于单击按钮并将此值更改为 True 的信号是什么样子的任何想法?

【问题讨论】:

  • 请展示您的模型的相关部分以及您尝试过的内容。我正在回答你之前的问题,但后来你删除了它......
  • 对不起,@MeL。我删除了,因为我认为它不清楚。我已经继续并添加了我的模型的相关字段。
  • 您能否提供一个示例,说明您正在尝试做什么以及您使用的文件?

标签: django django-signals


【解决方案1】:

要更改模型字段,您需要在视图中为其创建单独的函数,例如:

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中,你需要添加一个带有必要类的标签,例如:

    {% csrf_token %} 
    <a href="javascript:" class="change-user btn" data-userid="{{user.pk}}">Change</a>

最后是带有ajax调用的javascript部分:

<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 是否为真,以便您可以切换值。

【讨论】:

  • 非常感谢您的详细解释。这正是我一直在寻找的。非常感谢!
  • 不客气,希望你能实现自己的目标!
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2014-11-28
  • 2015-07-18
  • 2017-01-23
相关资源
最近更新 更多