最近、PythonとDjangoの実験を始めました。私はそれが好きで、すでにたくさんのことを学びましたが、それでもまだ長い道のりです...
5つの画像フィールドを含むモデルを作成しました。モデルの横に、データを入力して保存するためのフォームも作成しました。ここまでは順調ですね。次に、アップロードされた画像を「編集」するための別のフォームを作成します。つまり、次のようになります。
- 新しい画像をアップロードする
- データベースから「古い」画像を削除します
私は1つの画像の仕事をする以下のコードを書きました:
if form.is_valid():
form_image = form.cleaned_data['image_1']
try:
details = Model.objects.get(pk=pk)
if details.image_1 != form_image:
details.image_1.delete(save=False)
except: pass # when new photo then we do nothing, normal case
form.save()
しかし、私は次の問題に苦しんでいます:
このコードを書き直して5つの画像フィールドを更新するにはどうすればよいですか?最悪の場合、5つの画像フィールドすべてを編集できるからです。'forループ'で試しましたが、成功しませんでした。例えば:
image_list = [image_1, image_2, image_3, image_4, image_5] if form.is_valid(): for image in image_list: form_image = form.cleaned_data[image] try: details = Model.objects.get(pk=pk) if details.image != form_image: details.image.delete(save=False) except: pass # when new photo then we do nothing, normal case form.save()
このロジックを書くためのよりインテリジェントな方法はありますか?このコードで私が抱えている問題は、画像の名前をチェックすることです。同じ名前の画像が複数あると、おそらくこれはうまくいきません...
うまくいけば、誰かがフィードバックをして、私を正しい方向に向けてくれることを願っています。
どうもありがとう!
敬具