我正在尝试弄清楚如何上传图像并在单个表单上获取用户输入。 我的模型:
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)
)
请您参考如下方法:
你可能会这样做:
<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)
)
不过,第二个将添加您的函数使用的所有变量,因此您应该确保如果您使用它,您的函数将不会使用任何内置名称。通常不常见,但您应该确定一下。
编辑:添加了一个提交按钮以明确您只需要一个。还添加了 View 的响应。