由错误数据填充的表单集 - 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
基本问题:我有一个产品列表,当我去编辑单个产品时,图像上传表单集填充了文件夹中的所有图像,但它应该只填充相关图像(见左图)下图的手边)。
当我尝试对产品或图像进行任何更改时,它是不成功的,由不相关图像填充的输入框现在显示 '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