4

私は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ソリューションで何らかの形で対処できると思いますか?


私が言ったように、これは非常に一般的な状況のようです。これを行う既存のコードを誰かが知っている場合は、私に知らせてください。ありがとう!

4

1 に答える 1

1

モデルフォームセットを使用し、テンプレートでサイズ変更された画像にアクセスする必要があると思います{{ form.instance.resized_img }}

于 2013-01-16T19:05:11.527 に答える