【问题标题】:how to delete multiple delete in django如何在django中删除多个删除
【发布时间】:2018-11-30 13:10:24
【问题描述】:

怀疑:

这里我提到了Html和输出Image。

如果我单击全选选项(复选框),它将选择所有图像,但我的疑问是单击删除按钮后如何删除所有图像。

HTML

{% for j in img %}
    <h4>
        Select All
        <input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
    </h4>
    <button class="btn btn-danger" action=" ">Delete</button>
    <div class="col">
        {% if i.placename == j.gallery_place %}
            <div class="show-image">
                <img src="{{j.gallery_image.url}}" style="height:130px; width:130px;" />

                <tag class="one" style="margin:8%">
                    <input type="checkbox" name="selected[]" value="{{j.id}}" />
                </tag>

            </div>
        {% endif %}
    </div>
{% endfor %}

图片

enter image description here

【问题讨论】:

  • 您可以将所有 id 添加到例如 POST 请求中,然后让服务器删除这些(例如批量)。
  • @WillemVanOnsem Actullay 我是 django 的新手,所以我不知道在哪里添加它。

标签: javascript django django-forms django-templates django-views


【解决方案1】:

您可以在 Django 中使用FormView 并按如下方式处理它们。您需要先创建一个带有复选框的表单:

# forms.py
class CheckboxesForm(forms.Form):
    checkboxes = forms.ModelMultipleChoiceField(
        MyModel.objects.all(),
        widget=forms.CheckboxSelectMultiple)

然后你需要编写自己的FormView并重写form_valid()方法来执行选中对象的删除。如果要定义具有复选框的对象,可以覆盖 get_form() 方法。

# views.py
class MyListView(ListView):
    """
    View displaying a list of objects, you will redirect here after successfully deleting the objects you want
    """
    model = MyModel


class MyView(FormView):
    """
    Class based view taking care of rendering the form and processing it after posting. Finally, redirects you to your list view defined above.
    """
    form_class = MyForm

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context['objects'] = MyModel.objects.all() # Customize this queryset to your liking
        return context

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        form.fields['checkboxes'].queryset = 
            MyModel.objects.all() # Customize this queryset to determine for which objects you want to display checkboxes
        return form

    def form_valid(self, form):
        qs = myModel.objects.filter(
            pk__in=list(map(int, self.request.POST.getlist('checkboxes'))))
        qs.delete()

        return HttpResponseRedirect(reverse_lazy('someurl'))

您的模板将如下所示(改编自您发布的内容)

# template.html
{% for j in objects %}
    <h4>
        Select All
        <input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
    </h4>
    <button class="btn btn-danger" action=" ">Delete</button>
    <div class="col">
        {% if i.placename == j.gallery_place %}
            <div class="show-image">
                <img src="{{j.gallery_image.url}}" style="height:130px; 
width:130px;" />

            <tag class="one" style="margin:8%">
                <div class="form-checkbox"><input type="checkbox" name="checkboxes" value="{{ j.pk }}">
            </tag>

        </div>
        {% endif %}
    </div>
{% endfor %}

最后,连接网址。

# urls.py
from django.conf.urls import include, url

from.views import MyView, MyListView

urlpatterns = [
    url(r'^listdelete/$', MyView.as_view(), name="delete-list"),
    url(r'^mylist/$, MyListView.as_view(), name="someurl"),
]

【讨论】:

  • 我想在 urls.py 中传递什么。而且我们没有在删除按钮中传递 url。 @brunostuyts
  • 我还添加了 url 配置,并添加了更多代码以确保完整性。您可能想阅读 Django class based views
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多