将变量传递到url以查询数据库

时间:2020-05-16 17:41:05

标签: django

在我的网址中,我想传递一个密钥并基于该密钥在该视图上查询数据库:

#url.py

   path('view/<slug:secret_key>/',DetailMessage.as_view(),name='message'),

view.py

class DetailMessage(generic.DetailView):
    model = Message


    template_name = 'msg/view.html'
    def get_queryset(self):
        queryset = super().get_queryset()
        key =self.request.get('secret_key',None) 

        return queryset.get(secret_key=key)

但是我收到此错误:

WSGIRequest' object has no attribute 'get' 

1 个答案:

答案 0 :(得分:0)

URL参数不是存储在请求中,而是存储在self.kwargs中,因此您可以使用以下命令进行访问:

class DetailMessage(generic.DetailView):
    model = Message

    template_name = 'msg/view.html'
    def get_queryset(self):
        return super().get_queryset().filter(
            secret_key=self.kwargs['secret_key']
        )

请注意,get_queryset应该返回QuerySet,而不是 object 。如果您不覆盖get_object方法,则对.get()的结果调用.get_queryset(..)(在pkslug进行过滤后,如果可以找到URL中的这些参数。)