基本问题:我有一个产品列表,当我去编辑单个产品时,图像上传表单集中填充了文件夹中的所有图像,但它只应填充相关图像(参见左侧) (见下图)。
当我尝试对产品或图像进行任何更改时,它不成功,现在显示由不相关图像填充的输入框'此字段是必需的' (见下图右侧)
显然,我需要成功编辑产品对象,并且我希望此页面仅由与该产品相关的图像填充。
视图
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, request.FILES, 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()) # possible wrong queryset
return render(request, 'product/edit.html',
{'product_form': product_form, 'formset': formset},
context_instance=RequestContext(request))
因此,此代码以某种方式将我上传的所有图像(包括不相关的图像)返回到单个产品的编辑表单 - 我如何制作它以便只有那些与实例相关的图像才会显示在表单中?< / p>
在相关的说明中 - 如何访问formset中的单个图像 - 例如,如果我想删除一个图像,我在看什么样的修改?
答案 0 :(得分:1)
这取决于您的型号。
formset = ImageFormSet(queryset=ProductImage.objects.all()) # possible wrong queryset
这确实是错误的查询集。你应该做点什么:
queryset=ProductImage.objects.filter(product_id = pk)
如果您为product_image字段指定了related_name
而不是
queryset=instance.related_product_images
https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ForeignKey.related_name