Advertisement
horozov86

Profile Update View

Oct 18th, 2024 (edited)
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.71 KB | None | 0 0
  1. ОПИСАНИЕ НА КОДА:
  2.  
  3. 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 връщаме резултата.
  4.  
  5. class ProfileUpdateView(views.UpdateView):
  6.     model = Profile
  7.     template_name = 'accounts/edit_profile.html'
  8.     fields = ("first_name", "last_name", "age", "profile_photo",)
  9.  
  10.     def form_valid(self, form):
  11.         profile_photo = self.request.FILES.get('profile_photo')
  12.         if profile_photo:
  13.             form.instance.profile_photo = profile_photo
  14.         return super().form_valid(form)
  15.  
  16.     def get_success_url(self):
  17.         return reverse("details profile", kwargs={"pk": self.object.pk})
  18.  
  19. Полета за актуализиране (fields): С параметъра fields = ("first_name", "last_name", "age", "profile_photo",) се задават полетата на модела Profile, които могат да се редактират и актуализират в изгледа. Това означава, че формата за редактиране ще съдържа само тези четири полета, които потребителят може да промени.
  20.  
  21. Обработка на профилната снимка в form_valid(): В метода form_valid(), кодът проверява дали има качена снимка чрез self.request.FILES.get('profile_photo'). Ако има такава, тогава се задава form.instance.profile_photo = profile_photo, за да се обнови снимката на профила с качената от потребителя. След това super().form_valid(form) се грижи за съхранението на промените.
  22.  
  23. Използване на model = Profile: Задаването на model = Profile е по-добър вариант от queryset = Profile.objects.all(), когато нямаш нужда да променяш или филтрираш queryset. Това е стандартен и по-четим подход, тъй като Django автоматично ще използва всички обекти от Profile като основен queryset.
  24.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement