Обновление профиля пользователя с помощью его 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 как обычно.

Вернуться на верх