ОПИСАНИЕ НА КОДА:

1. def form_valid(self, form): --> чрез form казваме, че override-ването на метода form_valid е насочено към form; 2. Създава се променлива profile_photo която включва файла снимката, което е качена от потребителя в полето 'profile_photo'. 3. Прави се проверка if дали има такава снимка качена. 4. Ако проверката е True атрибутът profile_photo от инстанцията form.instance се set-ва равен на променливата profile_photo. 5. В return връщаме резултата.

class ProfileUpdateView(views.UpdateView):
    model = Profile
    template_name = 'accounts/edit_profile.html'
    fields = ("first_name", "last_name", "age", "profile_photo",)

    def form_valid(self, form):
        profile_photo = self.request.FILES.get('profile_photo')
        if profile_photo:
            form.instance.profile_photo = profile_photo
        return super().form_valid(form)

    def get_success_url(self):
        return reverse("details profile", kwargs={"pk": self.object.pk})

Полета за актуализиране (fields): С параметъра fields = ("first_name", "last_name", "age", "profile_photo",) се задават полетата на модела Profile, които могат да се редактират и актуализират в изгледа. Това означава, че формата за редактиране ще съдържа само тези четири полета, които потребителят може да промени.

Обработка на профилната снимка в form_valid(): В метода form_valid(), кодът проверява дали има качена снимка чрез self.request.FILES.get('profile_photo'). Ако има такава, тогава се задава form.instance.profile_photo = profile_photo, за да се обнови снимката на профила с качената от потребителя. След това super().form_valid(form) се грижи за съхранението на промените.

Използване на model = Profile: Задаването на model = Profile е по-добър вариант от queryset = Profile.objects.all(), когато нямаш нужда да променяш или филтрираш queryset. Това е стандартен и по-четим подход, тъй като Django автоматично ще използва всички обекти от Profile като основен queryset.
