Я новичок в 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 при сохранении формы и сохранении ее в переменной и переименовывании файла, в конце концов, было много путаницы.