我正在使用 Django 并尝试实现,我认为这是图像上传中相当常见的功能。我想生成一个formset
(也许modelformset
?)为用户刚刚上传的每个图像添加标题(类似于“查看您刚刚上传的图像”页面)。
这是基本思想:
我有一个用于一次提交一个或多个图像的简单表单:
class UploadImageForm(forms.Form):
images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'}))
它产生这个:
然后,在视图中,我对来自 POST 的每个图像进行一些处理/处理,并将图像的调整大小版本存储为模型的实例,称为ImageItem
:
class ImageItem(models.Model):
resized_img = models.ImageField(upload_to=img_get_file_path)
user = models.ForeignKey(User)
upload_date = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
caption = models.CharField(max_length=1000,
blank=True)
(这里是UploadImage
视图,供参考......请注意,一旦表单被验证并且图像已经保存在handle_uploaded_image函数中,它就会重定向到一个视图,以便为所有图像添加标题。)
def UploadImageToLibrary(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_image(form) # creates new sizes of images, saves resized version as ImageItem instances
return AddInfoForImage(request) # SEND USER TO A PAGE FOR ADDING CAPTIONS TO EACH IMAGE...not sure what this next view should contain...?
else:
form = UploadImageForm()
return render_to_response('upload_item.html', {'form': form}, context_instance=RequestContext(request))
好的,现在是我需要帮助的部分......
图像保存后,我希望下一个视图为已上传的每个图像生成一个表单,以便用户可以为图像添加标题。当他们完成将所有信息添加到所有新图像时,他们点击submit
,并且每个标题都保存到适当的 ImageItem 实例中。我不知道应该创建多少个表单,这取决于用户上传了多少张图片。下面是我希望表单集做什么的可视化表示(忽略其他内容,我们可以继续使用简单的标题作为示例):
具体来说,这是我需要帮助的东西:
CaptionForm
根据用户刚刚上传的图片数量,我不知道如何提供适当数量的s。- 我不知道如何将适当
ImageItem.resized_img
的放置在模板中它引用的表单的左侧。 - 我不知道如何确保
CaptionForm
提交 s 后,我将字幕保存到适当的ImageItem
实例中。
我想所有这三点都可以在一个formset
或解决方案中以某种方式modelformset
解决?
就像我说的,这似乎是一种非常普遍的情况。如果有人知道执行此操作的任何现有代码,请告诉我。谢谢!