Картинка профиля Django пытается дублироваться при обновлении профиля
Когда пользователь обновляет свой профиль, если он не меняет фотографию профиля, он пытается сохранить ее рекурсивным способом.
user/ profile_pics/ изображение1.jpg пользователь/ profile_pics/ image2.jgp
models.py
def create_path(instance, filename):
return os.path.join(
str(instance.user.id),
'profile/logo',
filename
)
class Member(models.Model):
profile_pic = models.ImageField(upload_to=create_path, null=True)
profile_pic_thumbnail = models.ImageField(upload_to=create_path, null=True)
def __str__(self):
return str(self.user)
def save(self, *args, **kwargs):
if not self.make_thumbnail():
# set to a default thumbnail
raise Exception('Could not create thumbnail - is the file type valid?')
super(Member, self).save(*args, **kwargs)
def make_thumbnail(self):
image = Image.open(self.profile_pic)
image.thumbnail((500, 500), Image.ANTIALIAS)
thumb_name, thumb_extension = os.path.splitext(self.profile_pic.name)
thumb_extension = thumb_extension.lower()
thumb_filename = thumb_name + '_thumb' + thumb_extension
if thumb_extension in ['.jpg', '.jpeg']:
FTYPE = 'JPEG'
elif thumb_extension == '.gif':
FTYPE = 'GIF'
elif thumb_extension == '.png':
FTYPE = 'PNG'
else:
return False # Unrecognized file type
# Save thumbnail to in-memory file as StringIO
temp_thumb = BytesIO()
image.save(temp_thumb, FTYPE)
temp_thumb.seek(0)
# set save=False, otherwise it will run in an infinite loop
self.profile_pic_thumbnail.save(thumb_filename, ContentFile(temp_thumb.read()), save=False)
temp_thumb.close()
return True
forms.py
class CreateMemberProfileForm(ModelForm):
class Meta:
model = Member
fields = ('profile_pic')
widgets = {
'profile_pic': ImageUploaderWidget(),
}
views.py
class UpdateProfileView(UpdateView):
model = Member
form_class = UpdateMemberProfileForm
template_name = 'update_profile.html'
success_url = reverse_lazy('dashboard')
updateprofile.html
<form class="dropzone" enctype="multipart/form-data" method="post">
{% csrf_token %}
{{ form.media }}
<div class="row">
<div class="col">{{form.profile_pic.label}}<br/>{{form.profile_pic}}</div>
</div>
<br/>
<div class="row">
<div class="col">
<button class="btn btn-primary">Update Profile</button>
</div>
</div>
</form>
Я сделал это для нескольких сайтов, и это работало в прошлом. Он также работал, когда я впервые его внедрил. Он перестал работать, когда я изменил дизайн html-формы.