переименование файла при загрузке с django modelform - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в django и в настоящее время следую учебному пособию, где он использует ModelForm для профиля пользователя, где пользователь может загрузить аватар. Я хочу иметь возможность обновить файл, который они загружают на сгенерированный идентификатор. Я просто не уверен, где и как сделать захват и обновление файла.

Моя модель

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(default='avatar_default.jpg', upload_to='profile_images')

    def save(self,*args, **kwargs):
        super().save()
        img = Image.open(self.avatar.path)
        if img.height > 300 or img.width > 300:
            output_size = (300,300)
            img.thumbnail(output_size)
            img.save(self.avatar.path)

    def __str__(self):
        return f'{self.user.username} Profile'

Форма

class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['avatar']

Вид

@login_required
def user_profile(request):

    if request.method == 'POST':
        user_form = UserUpdateForm(request.POST, instance=request.user)
        profile_form = ProfileUpdateForm(request.POST, 
                                        request.FILES, 
                                        instance=request.user.profile)

        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
            messages.success(request, f'Your profile has been updated')
            return redirect('users_profile')

    else:
        user_form = UserUpdateForm(instance=request.user)
        profile_form = ProfileUpdateForm(instance=request.user.profile)

    context = {
        'user_form': user_form,
        'profile_form': profile_form
    }

    return render(request, "users/profile.html", context)

Я пытался применить некоторые рекомендации в Интернете, где вы делаете Commit = False при сохранении формы и сохранении ее в переменной и переименовывании файла, в конце концов, было много путаницы.

...