django rest框架:在视图中获取url路径变量
Posted
技术标签:
【中文标题】django rest框架:在视图中获取url路径变量【英文标题】:django rest framework: Get url path variable in a view 【发布时间】:2017-09-15 05:57:24 【问题描述】:我必须将product_id
(它是一个字符串)传递到一个视图中。在那里,我必须根据产品 ID 进行一些数据库操作。如何在该视图中获取该产品 ID?实际上,ProductDetailConfiguration
视图中的参数应该是什么?现在我通过viewsets.ModelViewSet
。实际上,这个 API 调用与任何模型都不完全相关。
# urls.py
url(r'^product-configuration/(?P<product_id>[\w-]+)/$', views.ProductDetailConfiguration, name='product-configuration'),
#views.py
class ProductDetailConfiguration(viewsets.ModelViewSet):
queryset = Product.objects.all()
def get_queryset(self, **kwargs):
queryset = Product.objects.all()
product_id = self.request.get('product_id', None)
#filter query set based on the product_id
return queryset
serializer_class = ProductConfigurationSerializer
【问题讨论】:
【参考方案1】:网址参数在self.kwargs
中可用。
来自the documentation:
过滤 URL
另一种过滤方式可能涉及根据 URL 的某些部分限制查询集。
例如,如果您的 URL 配置包含这样的条目:
url('^purchases/(?P<username>.+)/$', PurchaseList.as_view()),
然后您可以编写一个视图,该视图返回由 URL 的用户名部分过滤的购买查询集:
class PurchaseList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): """ This view should return a list of all the purchases for the user as determined by the username portion of the URL. """ username = self.kwargs['username'] return Purchase.objects.filter(purchaser__username=username)
【讨论】:
self.kwargs['param'] -> 这是正确的答案【参考方案2】:您必须在视图中使用lookup_field
才能获得product_id
,并且该视图不应属于任何模型。在这里我已经回答了像你这样的问题using django rest framework to return info by name
希望这将有助于解决您的问题。
【讨论】:
我已经按照你在那个问题中的建议实施了。当我在视图中打印查询集时,它会显示结果。ProductConfigurationCustomSerializer(queryset)
。那么序列化程序中的模型应该是什么。当我评论模型引用时,它会引发错误。
其实你想做什么?在您的问题中,您只是要求在视图中获取 product_id。【参考方案3】:
这是我的方法:
更新网址:
url(r'^product-configuration$', views.ProductDetailConfiguration, name='product-configuration'),
在view.py中:
class ProductDetailConfiguration(viewsets.ModelViewSet):
lookup_field = 'product_id'
serializer_class = ProductConfigurationSerializer
def retrieve(request, product_id=None, *args, **kwargs):
queryset = self.get_queryset()
# Filter with produc_id
# print(product_id)
# Return Response
【讨论】:
【参考方案4】:您可以通过以下方式从请求 url 中获取数据:-
data_dict = self.request.data
这将返回请求 url 的所有参数的字典。
可以使用参数名作为key
【讨论】:
网址参数不存在。以上是关于django rest框架:在视图中获取url路径变量的主要内容,如果未能解决你的问题,请参考以下文章
Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?
django rest框架使用动作装饰器在url中添加查看财务报表的路径
在 Django Rest 框架中获取图像字段绝对路径 - 非请求流