【问题标题】:How To Remove Row in django-extra-views?如何删除 django-extra-views 中的行?
【发布时间】:2019-06-19 06:57:56
【问题描述】:

ModelFormSetView中如何删除行

这是我的代码,如何在 Django-extra-views 中管理删除行

我正在尝试使用 ModelFormSetView

if formset.deleted_forms:
    for obj in formset.deleted_forms:
        obj.delete()

HTML

{{ formset.management_form }}
{% for object in formset %}
{% for hidden in formset.hidden_fields %}
   {{ hidden }}
   {% endfor %}
<tr class="formset"  class="even pointer">{{ object.id }}
   <td class=" ">{{ object.as_p }}</td>                         
   <td class=""></td>
</tr>
    {% endfor %}

查看

这是一般视图我该如何管理填写在此的DELETE


class MeasurementPropsUpdateViews(ModelFormSetView):
    model = MeasurementProps
    form_class= MeasurementPropsForm

    template_name = "master/measurementprops_form.html"
    def get_queryset(self):
        pk = self.kwargs.get('pk')
        current_user = self.request.user
        return self.model.objects.filter(ProductName=pk, user=current_user)

    def get_success_url(self):
        return reverse("tailoringproducts")

    def formset_valid(self, formset):
            for docs_form in formset:
                docs_form.save(commit=False)
                if formset.deleted_forms:
                    for obj in formset.deleted_forms:
                        obj.delete()
                docs_form.instance.ProductName_id = self.kwargs.get('pk')
                docs_form.instance.user = self.request.user
                docs_form.save()
            messages.success(self.request, "Measurement Properties Updated successfully")
            return HttpResponseRedirect(self.get_success_url())

    def formset_invalid(self, formset):
        messages.error(self.request, "Form getting invalid")
        return self.render_to_response(self.get_context_data(formset=formset))



【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    我没有测试过,但是根据文档,可以在类级别设置formset相关的属性。因此,在您的情况下,添加 factory_kwargs 并将 can_delete 指定为 True,例如:

    class MeasurementPropsUpdateView(ModelFormSetView):
        factory_kwargs = { 'can_order': False, 'can_delete': True}
    

    Documentation

    【讨论】:

    • 如果formset.deleted_forms:,我们如何在视图中写入
    【解决方案2】:

    formset.deleted_forms 仅在调用 formset.save(commit=False) 后可用。

    def formset_valid(self, formset):
        if formset.is_valid():
            instances = formset.save(commit=False)
    
            # Delete objects
            for obj in formset.deleted_forms:
                obj.delete() 
    
            for obj in instances:
                obj.ProductName_id = self.kwargs.get('pk')
                obj = user = self.request.user
                obj.save()
            messages.success(self.request, "Measurement Properties Updated successfully")
            return HttpResponseRedirect(self.get_success_url())
    
        #Formset is not valid 
        return False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2019-08-29
      • 2014-03-09
      • 1970-01-01
      • 2012-11-27
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多