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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

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

Q&A

0回答

1430閲覧

DjangoのPillowを使用したImageFieldについての問題を解決したいです!

nre

総合スコア35

Django

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python 3.x

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

0グッド

0クリップ

投稿2020/10/12 01:56

前提・実現したいこと

DjangoのImageFieldsで画像を一度消去する事なく、常に上書き保存できる様にしたいです。

現在DjangoのPillowを使用してImageFieldから画像の保存、表示をwebサイトで行っております。
ただ、画像を一度保存して、再度画像の変更、上書き保存しようとすると下記画像のようなメッセージが表示されてしまうので、
画像を一度消去する事なく、常に上書き保存できる様にしたいです。
イメージ説明

該当のソースコード

django

1#models.py 2 3class User(AbstractBaseUser, PermissionsMixin): 4 """カスタムユーザーモデル.""" 5 6 email = models.EmailField(_('email address'), unique=True) 7 first_name = models.CharField(_('first name'), max_length=30, blank=True) 8 last_name = models.CharField(_('last name'), max_length=150, blank=True) 9 nick_name = models.CharField(_('ニックネーム'), max_length=30, blank=False) 10 top_image = models.ImageField(_('トップ画像'), upload_to='media/', blank=True) 11 created_at = models.DateTimeField(default=timezone.now) 12 13#~~~~~~省略~~~~~~ 14 15 16 def save_and_rename(self, url, name=None): 17 18 """画像保存""" 19 res = requests.get(url) 20 if res.status_code != 200: 21 return "No Image" 22 path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/media/image/" 23 if name == None: 24 path += url.split("/")[-1] 25 else: 26 path += name 27 with open(path, 'wb') as file: 28 file.write(res.content) 29 return path 30

django

#view.py class UserUpdate(OnlyYouMixin, generic.UpdateView): model = User form_class = UserUpdateForm template_name = 'register/user_form.html' success_url = reverse_lazy('app:file_list') def get_success_url(self): return resolve_url('register:user_detail', pk=self.kwargs['pk'])

django

#forms.py class UserUpdateForm(forms.ModelForm): """ユーザー情報更新フォーム""" forms.ImageField(widget=forms.FileInput) class Meta: model = User fields = ('nick_name', 'top_image'#以下省略) widgets = { 'self_introduction': forms.Textarea(attrs={'cols': 40, 'rows': 10}), 'portfolio': forms.Textarea(attrs={'cols': 40, 'rows': 10}) } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control'

html

<div class="card-body"> <form action="" method="POST" enctype="multipart/form-data"> {{ form.non_field_errors }} <div class="form-group mt-2"><!-- 後で取り掛かる --> <label for="{{ form.top_image.label }}" class="pr_label">画像を編集する</label> <div class="input_size" style="width:300px;">{{ form.top_image }}</div> </div> {% csrf_token %} </form> </div>

補足情報(FW/ツールのバージョンなど)

画像の保存、表示は問題なく行われます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問