我试图用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/,但出现了一个错误
谢谢
尝试使用
router.register(r'Products/', views.ProductView, 'ProductsSearch')
然后使用你的URL,比如
/api/Products/?name=guitar
另一个可能的错误
return queryset
应该是需要正确放置的缩进问题相关问题 更多 >
编程相关推荐