前提・実現したいこと
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/ツールのバージョンなど)
画像の保存、表示は問題なく行われます。
あなたの回答
tips
プレビュー