删除单个相关文件 - Django
Deleting individual related files - Django
我有一个 django modelformset,它执行以下操作:
添加页面
- 为 'product' 添加模型实例
- 与(外键)相关的模型
'product' 用于向产品实例添加多张图片。
编辑页面
- 该表单集也在一个编辑页面上,它预先填充了 'product' 实例及其相关图像。
问题来了,当我将多张图片上传到产品时,我希望能够从编辑页面中删除选中的图片(保留其余图片)。
如何将单个图像 - 它在数据库中的位置以及它在文件系统中的位置传递给某种删除方法? 在理想情况下,我希望通过某种 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)
添加到视图中,然后在模板中循环遍历它们。
希望这对某人有所帮助。
我有一个 django modelformset,它执行以下操作:
添加页面
- 为 'product' 添加模型实例
- 与(外键)相关的模型 'product' 用于向产品实例添加多张图片。
编辑页面
- 该表单集也在一个编辑页面上,它预先填充了 'product' 实例及其相关图像。
问题来了,当我将多张图片上传到产品时,我希望能够从编辑页面中删除选中的图片(保留其余图片)。
如何将单个图像 - 它在数据库中的位置以及它在文件系统中的位置传递给某种删除方法? 在理想情况下,我希望通过某种 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)
添加到视图中,然后在模板中循环遍历它们。
希望这对某人有所帮助。