由错误数据填充的表单集 - Django 1.8

Formset populated by wrong data - Django 1.8

基本问题:我有一个产品列表,当我去编辑单个产品时,图像上传表单集填充了文件夹中的所有图像,但它应该只填充相关图像(见左图)下图的手边)。

当我尝试对产品或图像进行任何更改时,它是不成功的,由不相关图像填充的输入框现在显示 'this field is required'(见下图右侧)

显然,我需要成功编辑产品对象,并且我希望此页面仅由与该产品相关的图像填充。

景色

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))

所以这段代码以某种方式将我上传的所有图片(包括不相关的图片)返回到单个产品的编辑表单中 - 我如何才能做到只有与实例相关的图片才会显示在表单中?

相关说明 - 您如何访问表单集中的单个图像 - 例如,如果我想删除一个图像,我在看什么样的修改?

这取决于您的型号。

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