首页 > 解决方案 > /myapp/beds/ 处的类型错误

问题描述

get() 缺少 1 个必需的位置参数:'mat_number'

我是编程新手,请问如何按照以下详细信息解决上述 TypeError:

class BedsView(View):
    def get_user_details(self, username, mat_number):
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            return redirect('index') 
        userbeds = Userbed.objects.filter(user=user, mat_number=mat_number).order_by(-posted_date)[0]
        form = UserBedsForm({'mat_number':userbeds.mat_number})
        return (user, userbeds,form)

    @method_decorator(login_required)
    def get(self, request, username, mat_number):
        (user,userbeds,form) = self.get_user_details(username, mat_number)
        return render(request, 'myapp/beds.html', {'userbeds':userbeds, 'selecteduser':user, 'form':form})

    @method_decorator(login_required)
    def post(self, request, username):
        (user, userbeds, form) = self.get_user_details(username, mat_number)
        form = UserBedsForm(request.POST, instance=userbeds)
        if form.is_valid():
            form.save(commit=True)
            return redirect('beds', user. username)
        else:
            print(form.errors)
        return render(request, 'myapp/beds.html', {'userbeds':userbeds, 'selecteduser':user, 'form':form})

在 myapp urls.py,

   from django.urls import path
   from myapp import views 
   from myapp.views import BedsView 

   app_name = 'myapp'

   urlpatterns = [
          path('beds/<username>/', BedsView.as_view(), name='beds'), 
   ]

在 myproject urls.py 中,

  from django.contrib import admin 
  from django.urls import path, include 
  from myapp import views 


   urlpatterns = [
          path(' ', views.index, name='index'), 
          path('admin/', admin.site.urls),
          path('myapp/', include('myapp.urls')), 
   ]

请问我该如何排序这个TypeError?...

标签: djangopython-3.x

解决方案


您的代码如下:

def get_user_details(self, username, mat_number):
# ...
(user, userbeds, form) = self.get_user_details(username)

get_user_details需要使用两个参数调用:usernamemat_number。您只提供了一个:username. 因此,要么mat_number在方法调用中提供,要么更改方法签名。


推荐阅读