Django UpdateView:ValueError:以10为基数的int()的文本无效:用户名

Django UpdateView:ValueError:以10为基数的int()的文本无效:用户名,django,django-models,django-forms,Django,Django Models,Django Forms,我有一个Django应用程序,其中包含一个基本概要文件模型,该模型使用OneToOneField扩展了用户模型 类配置文件(models.Model): 用户=models.OneToOneField( 使用者 在_delete=models.CASCADE上, ) 这是/updateProfile的url模式 path('updateProfile/',views.UpdateProfileView.as_view(),name='update_profile'), 从网站的导航栏调用,如

我有一个Django应用程序,其中包含一个基本概要文件模型,该模型使用OneToOneField扩展了用户模型

类配置文件(models.Model):
用户=models.OneToOneField(
使用者
在_delete=models.CASCADE上,
)
这是/updateProfile的url模式

path('updateProfile/',views.UpdateProfileView.as_view(),name='update_profile'),
从网站的导航栏调用,如下所示:


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

class update\u profile\u表单(forms.ModelForm):
类元:
模型=外形
字段=('phone\u number'、'profile\u picture')
并在Views.py中调用以下基于UpdateView类的视图:

@method\u decorator(需要登录,'dispatch')
类UpdateProfileView(UpdateView):
模型=外形
success\u url=reverse\u lazy('home'))
表单\类别=更新\配置文件\表单
模板名称='update\u profile.html'
#这就是错误发生的地方
def get_queryset(自我):
返回Profile.objects.filter(用户=self.request.user)
My urls.py文件包含以下模式:

urlpatterns=[
路径(“”,TemplateView.as_视图(template_name='Login/home.html'),name='home'),
路径('home/',TemplateView.as_view(template_name='Login/home.html'),name='home'),
路径('updateProfile/',views.UpdateProfileView.as_view(),name='update_profile'),
]

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

这是返回对象,因此会出现问题

return Profile.objects.filter(user=self.request.user)
将此更改为

return Profile.objects.filter(user=self.request.user.pk) 

在html中更改此行

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


as
request.user返回用户对象
,但是
url
pk
,它需要一个
int
字段

试试这个

class UpdateProfileView(LoginRequiredMixin, UpdateView):
    login_url = '/add login link/'
    redirect_field_name = 'add login field'
    model = Profile
    success_url = reverse_lazy('home')
    form_class = update_profile_form
    template_name = 'update_profile.html'

   # add post function if you have
在html中

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

在url中

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

好的,我尝试了你的解决方案,它返回404页未找到,url也不正确,即在yeah的位置,因为我想你的应用程序有一个应用程序名称?您需要将其放在模板中url的前面。如果您无法理解,请显示主url和应用程序url文件。如果我使用Profile.objects.get代替Profile.objects.filter,则会引发错误:“Profile”模型没有属性“filter”显示url,否则我如何说明错误,如果get给您错误,请保留过滤器这是url模式:path('updateProfile/',views.UpdateProfileView.as_view(),name='update_profile'),您正在使用updateview,为什么需要在那里设置查询?您可以删除它。还可以将您的链接更改为
我尝试了您的解决方案,出现了404页错误。但是,我可以通过将url从127.0.0.1:8000/mysite/updateProfile/5更改为127.0.0.1:8000/mysite/updateProfile/1来访问我的模板,它会对“updateProfile”进行反向操作未找到参数“(“”),”。另外,请注意,在views.py中,queryset()包含:return Profile.objects.filter(user=self.request.user)您可以将
profile.user.pk
更改为
user.pk
request.user.pk
,这取决于您的html链接在模板中的位置。并且您不会在updateview中使用queryset。因此,您不需要在那里添加queryset,除非您正在检索大量用户,例如ListView。此外,您还可以添加get和post函数改为使用updateview。好的,试过了,抛出了一个404页错误,原因很简单,url链接是127.0.0.1:8000/mysite/updateProfile/5到127.0.0.1:8000/mysite/updateProfile/1…我该怎么办?我没有得到它?当你在url中将pk从5手动更改为1时,它是404页吗?当pk为5时,我会遇到404,但当我在url中将其手动更改为id=1时,模板成功呈现
path('updateProfile/<int:pk>/', views.UpdateProfileView.as_view(), name='update_profile'),