Вы можете включить несколько форм в один и тот же тег <form>
, используя аргумент prefix.
Исключить из поля модель продукта. В представлении проверьте, являются ли обе формы действительными. Если обе формы действительны, сохраните обе формы, но используйте commit=False
для формы изображения, чтобы вы могли вручную установить продукт.
Собираем все вместе, ваши формы и вид должен выглядеть примерно так:
class ProductForm(forms.ModelForm):
class Meta:
model = Product
class PictureForm(forms.ModelForm):
class Meta:
model = Picture
exclude = ('product',)
def my_view(request):
if request.method == "POST":
product_form = ProductForm(prefix="product", data=request.POST)
picture_form = PictureForm(prefix="picture", data=request.POST, files=request.FILES)
if product_form.is_valid() and picture_form.is_valid():
product = product_form.save()
picture = picture_form.save(commit=False)
picture.product=product
picture.save()
return HttpResponseRedirect("/success_url/")
else:
product_form = ProductForm(prefix="product")
picture_form = PictureForm(prefix="picture")
return render(request, "my_template.html", {'product_form':product_form,
'picture_form': picture_form,
})
Ваш шаблон должен выглядеть следующим образом:
<form>
<table>
<tbody>
{{ product_form }}
{{ picture_form }}
</tbody>
</table>
<p><input type="submit" value="Submit" /></p>
</form>
Спасибо за ваш ответ. Сначала у меня была картинка в таблице продуктов, но потом я понял, что мне нужно больше одного изображения для одного продукта, поэтому я сделал специальную таблицу для фотографий. Код от Alasdair выполнил эту работу. – fiddis