如何使用单个表单编写视图以添加新人,并且在同一表单上,可以添加0或1或2或... 68757857同一个人的图像?
请参阅以下代码。
在models.py中:
class Person(models.Model):
name = models.CharField(max_length=50)
class Image(models.Model):
person = models.ForeignKey(Person)
image = models.ImageField(upload_to='images/')
在forms.py中:
class PersonForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name']
class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ['person', 'image']
从我所看到的,使用了formsets。我看了很多关于SO的例子,阅读文档,我仍然感到困惑。
如果有人能够在本问题开头提供符合规范的views.py示例,我将不胜感激。
答案 0 :(得分:1)
您可以使用Inline formsets。
在view.py
中,您必须创建一个新的人员实例,然后将此实例与formset一起使用:
from django.forms import inlineformset_factory
ImageFormSet = inlineformset_factory(Person, Image, fields=('image',))
def my_view(request):
form = PersonForm(request.POST or None)
if form.is_valid():
new_person = form.save()
formset = ImageFormSet(request.POST or None, request.FILES or None, instance=new_person)
if formset.is_valid():
formset.save()
return redirect('persons:main')
else:
formset = ImageFormSet(request.POST or None, request.FILES or None)
return render(request, 'my_template.html', {'formset': formset, 'form': form})
在my_template.html
:
<form action="" method="post" enctype="multipart/form-data">
{{ form.as_p }}
{{ formset.management_form }}
{% for frm in formset %}
{{ frm.as_p }}
{% endfor %}
<input type="submit" value="Create">
</form>