django 使用用户uuid更新用户配置文件

ia2d9nvy  于 2022-12-01  发布在  Go
关注(0)|答案(1)|浏览(158)

我想更新用户配置文件,将用户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一样的profile,但没有找到,并返回这个错误。然而,如果我把视图中的model改为user,它将无法找到字段,因为它们属于profile model。唯一有效的选择是将profile id作为kwarg传递,但出于安全原因,我不认为这是更好的选择。
有人能给我一个建议,如何更新配置文件与用户uuid在kwargs?谢谢提前!
UPD:以下是用户和配置文件模型:
第一个

rkue9o1l

rkue9o1l1#

假设以下模型,其中用户只有一个配置文件:

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。

相关问题