首页 > 解决方案 > Django KeyError 'pk' POST 方法

问题描述

我有用于排序对象的表单中的 post 方法

<form method="post" action="{%  url 'package_dashboard' %}">
{% csrf_token %}
    <button  type="submit" name="order_by_title">sortByName</button>
    <button  type="submit" name="order_by_date">sortByDate</button>
</form>

我的意见.py

class PackageDashboardView(PackageAccessMixin, ListView):
model = Package
template_name = "packages/dashboard.html"

def get_queryset(self):
    queryset = Package.objects.all().order_by('title', 'version__name'). \
        select_related('title', 'version').defer('title__metadata', 'validation', 'translations', 'diff_fields')
    if "order_by_date" in self.request.GET:
        queryset = Package.objects.all().order_by('-started', 'version__name'). \
            select_related('title', 'version').defer('title__metadata', 'validation', 'translations', 'diff_fields')
    elif 'order_by_title' in self.request.GET:
        queryset = Package.objects.all().order_by('title', 'version__name'). \
            select_related('title', 'version').defer('title__metadata', 'validation', 'translations', 'diff_fields')
    return queryset

我的网址.py

url(r'^packages/$', packages.PackageDashboardView.as_view(), name="package_dashboard"),

错误

内部服务器错误:/packages/ Traceback(最后一次调用):
文件“/home/abdel/Desktop/eclair-packager/eclair_env/lib/python3.6/site-packages/django/core/handlers/exception.py”,第 41 行,内部响应 = get_response(request) 文件“/ home/abdel/Desktop/eclair-packager/eclair_env/lib/python3.6/site-packages/django/core/handlers/base.py”,第 187 行,在 _get_response response = self.process_exception_by_middleware(e, request) 文件中“ /home/abdel/Desktop/eclair-packager/eclair_env/lib/python3.6/site-packages/django/core/handlers/base.py”,第 185 行,在 _get_response response = Wrapped_callback(request, *callback_args, ** callback_kwargs) 文件“/home/abdel/Desktop/eclair-packager/eclair_env/lib/python3.6/site-packages/django/views/generic/base.py”,第 68 行,在视图中返回 self.dispatch(request, *args, **kwargs) 文件 "/home/abdel/Desktop/eclair-packager/packager/permission_mixins.py”,第 20 行,在 dispatch return super().dispatch(request, *args, **kwargs) 文件“/home/abdel/Desktop/eclair- packager/eclair_env/lib/python3.6/site-packages/django/contrib/auth/mixins.py”,第 56 行,在调度返回 super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs) 文件“/home/abdel/Desktop/eclair-packager/eclair_env/lib/python3.6/site-packages/django/views/generic/base.py”,第 88 行,在调度返回处理程序中(请求,*args,** kwargs)文件“/home/abdel/Desktop/eclair-packager/packager/permission_mixins.py”,第 96 行,在 post obj = self.get_package() 文件“/home/abdel/Desktop/eclair-packager/packager/permission_mixins .py”,第 78 行,在 get_package 返回 get_object_or_404(Package, pk=self.kwargs['pk'], **kwargs) KeyError: 'pk' [26/Dec/2018 11:35:56] "POST /packages/ HTTP/1.1" 500 109583

标签: pythonhtmldjango

解决方案


您可能在视图或 url 部分中分配 pk(主键)时遇到问题,这可能有助于结帐


推荐阅读