繁体   English   中英

Django:用于为上传的图像添加字幕的Formset

[英]Django: Formset for adding captions to uploaded images

我正在使用Django并试图实现,我认为,这是图像上传中相当常见的功能。 我想生成一个formset (也许是modelformset ?),用于为用户刚上传的每个Image添加一个标题(类似于“查看刚刚上传的图像”页面)。

这是基本的想法:

我有一个简单的表格,可以一次提交一个或多个图像:

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实例。 我不知道应该创建多少表单,这取决于用户上传了多少图像。 下面是我希望formset执行的操作的可视化表示(忽略其他内容,我们可以继续使用简单的标题作为示例):

在此输入图像描述


具体来说,这是我需要帮助的东西:

  • 根据用户刚上传的图片数量,我不知道如何提供适量的CaptionForm
  • 我不知道如何将相应的ImageItem.resized_img放在它在模板中引用的表单的左侧。
  • 我不知道如何确保一旦提交了CaptionForm ,我就将标题保存到适当的ImageItem实例中。

我想可以在一个formsetmodelformset解决方案中以某种方式解决所有这三个点?


就像我说的,这似乎是一种非常普遍的情况。 如果有人知道任何现有代码,请告诉我。 谢谢!

我认为您需要使用模型表单集并访问模板{{ form.instance.resized_img }}调整大小的图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM