如何使用Django rest框架查询参数

2024-05-04 13:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Django创建一个API,但我很难理解查询字符串参数是如何工作的:到目前为止,我创建了一个端点,它给出了一个产品列表,并且知道我希望能够按名称过滤这些产品,如/api/Products/name=guitar或任何等价的/api/Products?name=guitar

我创建了此视图和序列化程序:

    serializer_class = ProductSerializer

    def get_queryset(self):
        queryset = ProductJoinShop.objects.raw(f'select * from Product join Shop using (id_shop) limit 12')
        name = self.request.query_params.get('name')
        if name is not None:
            queryset = ProductJoinShop.objects.raw(f'select * from Product join Shop using (id_shop) where name like \'%{name}%\' limit 12')
        return queryset

这是我的URL.py:

router = routers.DefaultRouter()                   
router.register(r'Products', views.ProductView, 'Products')  
router.register(r'Products/(?P<name>.+)/$', views.ProductView, 'ProductsSearch')  

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls))
]

这不会崩溃,但对于/api/Products/guitar/I,我什么都没有得到。我还尝试了/api/Products/?name=guitart/,但出现了一个错误

谢谢


1条回答
网友
1楼 · 发布于 2024-05-04 13:30:02

尝试使用router.register(r'Products/', views.ProductView, 'ProductsSearch')

然后使用你的URL,比如/api/Products/?name=guitar

另一个可能的错误return queryset应该是需要正确放置的缩进问题

serializer_class = ProductSerializer

def get_queryset(self):
    queryset = ProductJoinShop.objects.raw(f'select * from Product join Shop using (id_shop) limit 12')
    name = self.request.query_params.get('name')
    if name is not None:
       queryset = ProductJoinShop.objects.raw(f'select * from Product join Shop using (id_shop) where name like \'%{name}%\' limit 12')
       return queryset

相关问题 更多 >