删除单个相关文件 - Django

Deleting individual related files - Django

我有一个 django modelformset,它执行以下操作:

添加页面

编辑页面

问题来了,当我将多张图片上传到产品时,我希望能够从编辑页面中删除选中的图片(保留其余图片)。

如何将单个图像 - 它在数据库中的位置以及它在文件系统中的位置传递给某种删除方法? 在理想情况下,我希望通过某种 AJAX 方法实现此目的,但我可以从哪里开始?

查看编辑...

def EditProduct(request, pk):
    instance = get_object_or_404(Product, id=pk)
    ImageFormSet = modelformset_factory(ProductImage,
                                        form=ImageForm, extra=4)

    if request.method == 'POST':
        product_form = AddEditProductForm(request.POST, instance=instance)
        formset = ImageFormSet(request.POST, request.FILES,
                        queryset=ProductImage.objects.none())

        if product_form.is_valid() and formset.is_valid():

            product = product_form.save()

            images = formset.save(commit=False)
            for image in images:
                image.product = product
                image.save()
            return HttpResponseRedirect('/product/')

        else:
            print (product_form.errors, formset.errors)

    else:
        product_form = AddEditProductForm(instance=instance)
        formset = ImageFormSet(queryset=ProductImage.objects.all())

    return render(request, 'product/edit.html',
                  {'product_form': product_form, 'formset': formset},
                  context_instance=RequestContext(request))

一件小事 - 我怎样才能在模板中实际显示已经上传到产品的图像?目前,图像仅显示为表单集的预填充额外实例(url 到图像文件)。

编辑模板...

<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
    <table> 
            <p> {{ product_form.as_ul }}</p>

                <p> current images </p>     

                {% for product in product.images.all %}
                <img src="{{ product.image.url }}" alt="...">
                {% endfor %}
                <br> <p> break </p>

            {{ formset.management_form }}
            {% for form in formset %}
            {{ form }}
            {% endfor %}
    </table>

    <input type="submit" value="Confirm Changes">

经过长时间的搜索,我通过自定义函数找到了 way to delete individual images

如果你想显示与产品相关的图像,我发现有几种方法:一种方法是 modify the FileField widget 如果你想以以下形式显示图像...

我所做的是通过将第二个查询集更改为 queryset=ProductImage.objects.none()) 来删除预填充表单的上传图像,然后我将 pictures = ProductImage.objects.filter(product_id = pk) 添加到视图中,然后在模板中循环遍历它们。

希望这对某人有所帮助。