django UpdateView:ValueError:以10为底的int()无效文字:用户名

时间:2019-01-17 05:01:50

标签: django django-models django-forms

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

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

这是/ updateProfile的网址格式

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模板中使用哪种用户字段组合来呈现表单。

请帮助!谢谢

3 个答案:

答案 0 :(得分:1)

在html中更改此行

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

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

request.user returns user object相同,但是urlpk,需要一个int字段

答案 1 :(得分:0)

这是返回一个对象,以便出现问题

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

将此内容更改为

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

答案 2 :(得分:0)

尝试一下

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>

在网址中

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