【问题标题】:Django sweetifyDjango 甜化
【发布时间】:2020-05-22 01:12:43
【问题描述】:

我已经阅读了有关https://github.com/Atrox/sweetify-django 的文档,但我不是很清楚,我已经在 Django 中下载和导入了 sweetify 的要求。我只希望如果记录更新,弹出消息 (sweetify) 会出现。

def studentrecords(request):
   if request.method == 'POST':
      id = request.POST.get("id")
      update = StudentsEnrollmentRecord.objects.get(id=id)
      update.Section = s
      update.save()
      sweetify.success(request, 'You did it', text='Your Form has been Updated',persistent='Hell yeah')
      return render(request, 'Homepage/selectrecord.html')

这是我的html

{% load sweetify %}
{% sweetify %}
 <form  method="post" action="/studentrecords/" enctype="multipart/form-data">{% csrf_token %}
<table>
    {% for student in myrecord %}
    <tr>
        <td>Control #</td>
        <td><input type="text" name="id" value="{{student.id}}"></td>
        <td><input type="submit"></td>
    </tr>
    <tr>
        <td>Name: </td>
        <td><input type="text" value="{{student.Student_Users.Firstname}} {{student.Student_Users.Lastname}} {{student.Student_Users.Middle_Initial}}"></td>
        <td>Course/Track</td>
        <td><input type="text" value="{{student.Courses}}"></td>
    </tr>
    <tr>
        <td>Education Level: </td>
        <td><input type="text" value="{{student.Education_Levels}}"></td>
        <td>Strand: </td>
        <td><input type="text" value="{{student.strands}}"></td>
    </tr>
    <tr>
        <td>Section: </td>
        <td>
            <select name="section">
                <option value="{{student.Section.id}}">{{student.Section}}</option>
                {% for sections in section %}
                <option value="{{sections.id}}">{{sections.Description}}</option>
                {% endfor %}
            </select>
        </td>
        <td>Payment Type: </td>
        <td><input type="text" value="{{student.Payment_Type}}" class="myform"></td>
    </tr>
    {% endfor %}
</table>
 </form>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@9"></script>
<script>
    Swal.fire(
  'Good job!',
   'Data Updated!',
  'success'
)
</script>

我的设置.py

INSTALLED_APPS = [
    #my apps
    ….
    'sweetify'
]
SWEETIFY_SWEETALERT_LIBRARY = 'sweetalert2'

我没有收到任何错误,但没有弹出消息(sweetify)

【问题讨论】:

  • 缺少文档且应用不包含所需的 javascript 文件,因此假设您在模板中包含 SweetAlert javascript 库。你的例子中没有它。您是否在基本模板中包含了必要的代码?
  • 我更新了问题。我在我的html中发布脚本

标签: django sweetalert sweetalert2


【解决方案1】:

我认为您可能只需要在页面顶部通过 CDN 加载脚本。查看库,似乎模板标签{% sweetify %} 只是加载了一些类似这样的内容:

<script>
    Swal.fire(...)
</script>

因此,如果您尚未加载甜蜜警报脚本,Swal 将只是未定义。您将能够通过打开您的开发工具来确认这是否是问题所在,并且在控制台中您会看到一条消息,类似于“未定义的没有属性火灾”或类似的东西。我很好奇,您在页面底部的Swal.fire 是否有效?

【讨论】:

    【解决方案2】:

    首先,如果您想收到有关任何记录更新的通知,我建议您使用 Signals 而不是检测请求方法。这是一种更集中、更强大的解决方案。只需将此添加到您的models.py

    from django.db.models.signals import post_save
    
    @receiver(models.signals.post_save, sender=StudentsEnrollmentRecord)
    def update_enrollment_record_handler(sender, updated_instance, **kwargs):
        """This method is called after every call of StudentsEnrollmentRecord.save"""
        sweetify.success(request, 'You did it', text='Your Form has been Updated',persistent='Hell yeah')
    

    第二 - POST 旨在通过 RestAPI 创建对象,您应该切换到 UPDATE(包括所有对象字段)或 PUT(更新一些对象字段)。

    第三 - 当您在 sweetify 行上方添加打印语句时会发生什么?那个打印运行吗?如果没有,那么您的整个设置甚至都不会调用 studentrecords 方法,您需要分享更多信息,以便我们可以复制这种情况和/或提供进一步的建议。

    【讨论】:

    • 我绝对会推荐反对在模型级别这样做。用户通知是供用户查看的,许多模型保存与用户无关。此外,这会破坏关注点的分离,因为 sweetalert 只是一个前端小部件,不需要处于数据级别。
    • 你这样说:“我只希望如果记录更新,弹出消息(甜化)会出现”。然后你能改写这个问题吗?您不是在谈论 StudentsEnrollmentRecord 模型吗?
    • 我说的是 StudentsEnrollmentRecord 模型,但不是在管理站点中
    • 没错,所以如果你想在模型层面做一些事情,你应该在模型层面做。
    • @JuraBrazdil 在字里行间读到:“但不在管理站点中”。如果您将其与 post_save 绑定,那么第一,您没有请求对象,第二,当您通过数据迁移进行更新时,这将发生在管理站点中 - 除了批量更新之外的任何地方。相信我,你不会想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多