javascript - Django 表单上的 Jquery 模态确认提交以删除对象

标签 javascript jquery python django shopify

我正在使用 Django 和 Crispy 表单,并且还使用 Shopify 嵌入式应用 SDK。我试图显示一个模式窗口,让用户确认他们想要删除一个对象。

到目前为止我的代码已附上。我的模态窗口显示了以下代码,但是,用户在模态窗口上选择“删除”后,表单未提交(并且对象未删除): enter image description here

它只是关闭了模式,没有任何反应。

我尝试了网上的各种方法,但没有任何运气。

form.py

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper(self)

        self.helper.form_id = 'edit_form'

        self.helper.layout = Layout(        
            [... some input fields...]
        )

        # Add delete button
        self.helper.layout.append(Button('delete', 'delete'))

        # Normal submit button
        self.helper.layout.append(Submit('save', 'save'))

views.py

@login_required
def edit_object(request, *args, **kwargs):
    # Form handling logic
     with request.user.session:
         object = get_object_or_404(models.Object, pk=kwargs['object_id'], ...)

        if request.method == "POST":
            form = forms.MyForm(request.POST, request=request, instance=object)

            if not form.is_valid():
               [... do some stuff ...]

            if form.is_valid():

                # If the save button is pressed
                if request.POST.get('save'):
                    [... do some stuff to save and redirect to url of my choice ...]

                # If the delete button is pressed <<<< The Modal should appear prior to this
                if request.POST.get('delete'):
                    [... delete to object and redirect to url of my choice ... ]
        else:
            form = forms.MyForm(request=request, instance=supplier)

        return render(request, 'template.html', {'form': form})

使用 Shopify 嵌入式应用 SDK 的 template.html:

    <script type="text/javascript">
        [...]
        ShopifyApp.ready(function() {
            ShopifyApp.Bar.initialize({});

            $("#button-id-delete").click(function(ev){
                ShopifyApp.Modal.confirm({message: "Are you sure you want to delete?"}, function(result){
                    if(!result){
                        result.preventDefault();
                    }
                    else {
                        alert("Contine");
                        $("form#edit_form").submit();
                    }
                });
            });
        });
    </script>

<form enctype="multipart/form-data" method="post">
    {% crispy form %}
</form>

渲染的 html

<form enctype="multipart/form-data" method="post">
    <form  id="edit_form" method="post" > <input type='hidden' name='csrfmiddlewaretoken' value='.......' /> 
       [.... various input fields .....]
       <input type="button"
          name="delete"
          value="delete"
          class="btn destroy btn"
          id="button-id-delete"
          />
       <input type="submit"
          name="save"
          value="save"
          class="btn btn-primary"
          id="submit-id-save"
          />
    </form>
</form>

最佳答案

您的删除按钮 ( <input type="button" name="delete"... ) 永远不会被发送。

调试此问题的一种快速方法是在您的 View 中检查 django 中的 request.POST 变量。

在这里,您以编程方式提交表单,因此永远不会收到“删除”消息。

                else {
                    alert("Contine");
                    $("form#edit_form").submit();
                }

我建议在提交之前通过 JavaScript 将字段添加到表单中:

                else {
                    alert("Continue");
                    $('<input>').attr({
                        type: 'hidden',
                        name: 'delete'
                        value: 'delete'
                    }).appendto('#edit_form');
                    $("form#edit_form").submit();
                }

或者设置您的delete按钮至<input type="submit"...因此它会与表单一起发送。

关于javascript - Django 表单上的 Jquery 模态确认提交以删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710172/

相关文章:

javascript - 使用字符串键和 JQuery 值动态创建关联数组

javascript - 通用Windows应用程序webview获取谷歌地图事件

javascript - 删除功能对 MySQL 表不起作用?

用于在笛卡尔空间中可视化/动画化粒子的 Python 框架

python - AWS lambda 函数无法访问互联网

Python 设置交集和 __eq__

javascript - 引用错误 : Can't find variable: __gCrWeb

javascript - Three.js 中的自定义形状

javascript - 预选下拉值

jquery - 侧边栏不会出现在 Bootstrap 中