質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

735閲覧

UpdateViewでのImagefieldについて、既存データを保持したい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/01 01:49

Django2.1
CreateViewとformで作成したデータを、UpdateViewで編集するとき、ImageFieldの内容を保持するにはどうしたらいいのでしょうか?
初回に入力したデータに対し、削除あるいは追加を行ないたいのです。

CharFieldやTextFieldの場合は保持され、削除・編集が可能なので同じようにできないかと。

#form.py class AppForm(forms.ModelForm): title = forms.CharField( widget=forms.TextInput, ) content = forms.CharField( widget=forms.Textarea, ) image = forms.ImageField( required=False, widget=forms.ClearableFileInput(attrs={'multiple': True}), )

ClearableFileInput --> FileInput
に変更すればいいのかとも思いましたが、そうではない……ようです。おそらく

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

UpdateViewImageField の内容が保持できない」というのはもう少し具体的に言うとどのような状況でしょうか? UpdateView で生成された画面を開くと、対象の model object の image がセットされていない状態でフォームが描画されるという意味ですか?


質問へのご回答を待たず先回りして回答してみます。

公式ドキュメントに載っているサンプル ↓ のように、シンプルに UpdateView を使うと ImageField もそのまま使えるのではないかと思います。

python

1from django.views.generic.edit import UpdateView 2from myapp.models import Author 3 4class AuthorUpdate(UpdateView): 5 model = Author 6 fields = ['name'] 7 template_name_suffix = '_update_form'

html

1<form method="post">{% csrf_token %} 2 {{ form.as_p }} 3 <input type="submit" value="Update"> 4</form>

もしいろいろとカスタマイズをされているのであればそれをいったんやめて、最もシンプルな形で UpdateView を利用してみて、 file フィールドがどのようになるか試みられてはいかがでしょうか( ↑ のコードと同じぐらいシンプルなもので)。

もしそれでも解決に至らない場合は、( form のコードだけでは何とも言えないので)関連する model と view のコードもあわせてご提示いただけると、何かしら具体的なコメントがさせていただけるかと思います。

投稿2019/05/03 00:14

gh640

総合スコア1407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/03 10:33 編集

>もう少し具体的に言うとどのような状況でしょうか? CreateView(form)で入力→保存→UpdateView(formを再表示)で変更 の流れの中で、formを再表示した時に、TextFieldは初回に入力した値が「html表示したform」にあらかじめ入力された状態になります。 (つまり再表示後、何もせず送信すれば、同じ内容が保存される) 一方、ImageFieldはform再表示の時、空の状態でformがhtml表示されます。 初回保存したimageが消えたわけではなく、formの表示が空になるだけです。 変更すれば追加保存されます。
gh640

2019/05/07 04:18

ご返信ありがとうございます。 なるほど。 `ImageField` のフィールドだけ既存の値がセットされずにフォームが描画されるとのことですね。不思議ですね。 ご提示の `AppForm` を見て少し気になるところとして `Meta.model` を定義されていないことがありますが、このあたりは大丈夫そうですか? 参考: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#modelform もし `AppForm` には問題が無いとのことであれば、 model クラスや view クラスのコードもご提示いただかないと、こちらから原因を特定・示唆するのは難しそうかなという気がします。
退会済みユーザー

退会済みユーザー

2019/05/09 02:57

ありがとうございます。 こちらについて、原因はわかりませんでしたが、別の方法で実装することで解決しました。 お手数おかけしました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問