首页 > 解决方案 > Django UpdateView:ValueError:int()的无效文字,基数为10:用户名

问题描述

我有一个 Django 应用程序,其中包含一个基本的 Profile 模型,该模型使用 OneToOneField 扩展了 User 模型

class Profile(models.Model):
    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
    )

这是 /updateProfile 的 url 模式

path('updateProfile/<pk>', views.UpdateProfileView.as_view(), name='update_profile'),

从网站的导航栏中调用如下:

<a href="{% url 'update_profile' request.user %}">UpdateProfile</a>

我在 forms.py 中使用了 ModelForm 类,如下所示:

class update_profile_form(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('phone_number', 'profile_picture')

在 Views.py 中调用了以下基于类的 UpdateView 视图:

@method_decorator(login_required, 'dispatch')
class UpdateProfileView(UpdateView):
    model = Profile
    success_url = reverse_lazy('home')
    form_class = update_profile_form
    template_name = 'update_profile.html'

    # this is where the error occurs
    def get_queryset(self):
        return Profile.objects.filter(user=self.request.user)

我的 urls.py 文件包含以下模式:

urlpatterns = [
    path('', TemplateView.as_view(template_name='Login/home.html'), name='home'),
    path('home/', TemplateView.as_view(template_name='Login/home.html'), name='home'),
    path('updateProfile/<pk>', views.UpdateProfileView.as_view(), name='update_profile'),
]

我无法确定使用上面的用户字段组合来呈现 update_profile.html 模板中的表单。

标签: djangodjango-modelsdjango-forms

解决方案


在 html 中更改这一行

<a href="{% url 'update_profile' request.user %}">UpdateProfile</a>

<a href="{% url 'update_profile' request.user.id %}">UpdateProfile</a>

as request.user returns user object,但是urlhaspk需要一个int字段


推荐阅读