我有一个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))
次要内容 - 如何在模板中实际显示已上传到产品的图片?目前,图像仅显示为预先填充的formset的额外实例(url to image file)。
模板用于编辑......
<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">
答案 0 :(得分:0)
经过长时间的搜索后,我通过自定义函数找到了way to delete individual images。
如果您想要显示与产品相关的图像,我找到了几种方法:如果您想在表单中显示图像,则可以使用modify the FileField widget ...
我所做的是通过将第二个查询集更改为queryset=ProductImage.objects.none())
来删除预先填充表单的上传图像,然后我将pictures = ProductImage.objects.filter(product_id = pk)
添加到视图中,然后在模板中循环显示它们。
希望这有助于某人。