我正在尝试弄清楚如何上传图片并在单个表单上获取用户输入。 我的模特:
class Image(models.Model):
artist = models.ForeignKey('Artist')
image = models.ImageField(upload_to="assets/images")
class Album(models.Model):
artist = models.ForeignKey(Artist,null=True)
notes = models.CharField(max_length = 50)
display = models.BooleanField()
date_created = models.DateTimeField(auto_now_add=True)
我的表格
class AlbumForm(forms.ModelForm):
class Meta:
model = Album
fields = ('notes',)
class ImageForm(forms.ModelForm):
class Meta:
model = Image
exclude = ('artist')`
我认为我的观点是错误的,我如何将这两个表单传递给模板?模板呈现两种形式的样子是什么样的?我想使用一个提交按钮。
def create(request):
form1 = ImageForm(request.POST, request.FILES or None)
form2= AlbumForm(request.POST or None)
if form2.is_valid() and form1.is_valid():
image = form1.save(commit=False)
image.artist = Artist.objects.get(pk=3)
image.save()
album = form2.save(commit=False)
album.save()
if 'next' in request.POST:
next = request.POST['next']
else:
next = reverse('art_show')
return HttpResponseRedirect(next)
return render_to_response(
'art/create.html',
{'ImageForm':form1},
{ 'AlbumForm': form2},
context_instance = RequestContext(request)
)
答案 0 :(得分:3)
你可能会这样做:
<form action="." method="post" enctype="multipart/form-data">
{{ImageForm.image}} <br />
{{AlbumForm.notes}} <br />
{{AlbumForm.display}} <br />
...
<input type="submit" value="Save" />
</form>
这将返回request.POST对象中的form1和form2对象。
views.py:
...
return render_to_response('art/create.html',
{'ImageForm': form1, 'AlbumForm': form2},
context_instance = RequestContext(request)
)
或者你可以这样做:
...
return render_to_response('art/create.html',
locals(),
context_instance = RequestContext(request)
)
虽然,第二个将添加您的函数使用的所有变量,因此您应该确保如果您使用它,您的函数将不使用任何内置名称。通常不常见,但你应该确定。
编辑:添加了一个提交按钮,以明确您只需要一个。还添加了视图的响应。