私はDjangoを使用していて、画像のアップロードでかなり一般的な機能を実装しようとしています。formsetユーザーがアップロードしたばかりの各画像にキャプションを追加するための(多分?)を生成したい( modelformset「アップロードしたばかりの画像を確認する」ページに似ています)。
これが基本的な考え方です。
1つまたは複数の画像を一度に送信するための簡単なフォームがあります。
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が送信されたら、キャプションを適切なImageItemインスタンスに保存する方法がわかりません。
これらの3つのポイントすべてが、1つformsetまたはmodelformsetソリューションで何らかの形で対処できると思いますか?
私が言ったように、これは非常に一般的な状況のようです。これを行う既存のコードを誰かが知っている場合は、私に知らせてください。ありがとう!