Обновление профиля пользователя с помощью его uuid
Я хочу обновить профиль пользователя, передавая его uuid в качестве kwarg. Вот url:
path("profile/update/<uuid:pk>", UpdateProfile.as_view(), name="update_profile"),
Однако после того, как я пытаюсь обновить свой профиль, он выдает ошибку. Вот мой вид:
class UpdateProfile(LoginRequiredMixin, UpdateView):
model = Profile
user_type_fields = {
"Buyer": ["photo", "first_name", "last_name", "city"],
"Celler": ["photo", "name", "city", "address"],
}
def get(self, request, *args, **kwargs):
print(kwargs)
self.fields = self.user_type_fields[get_user_model().objects.get(pk=kwargs["pk"]).type]
return super().get(request, *args, **kwargs)
А вот и сама ошибка:
Page not found (404)
No profile found matching the query
Как я понимаю, django пытается найти профиль с uuid как в url, не находит его и возвращает мне эту ошибку. Однако, если я изменю модель в представлении на user, он не сможет найти поля, так как они принадлежат модели профиля. Единственным рабочим вариантом было передать id профиля как kwarg, но я не считаю это предпочтительным по причинам безопасности.
Может кто-нибудь подсказать, как обновить профиль с uuid пользователя в kwargs? Заранее спасибо!
Предполагая следующую модель, где пользователь имеет только один профиль:
class Profile(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
photo = models.ImageField()
# ... your other fields
Затем вы можете перезаписать метод get_object()
:
class UpdateProfile(LoginRequiredMixin, UpdateView):
model = Profile
fields = ['photo', '...']
def get_object(self):
user = get_user_model().objects.get(pk=self.kwargs['pk'])
profile = user.profile
return profile
А затем используйте UpdateView как обычно.