Картинка профиля 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-формы.

Вернуться на верх