繁体   English   中英

django rest 框架:在视图中获取 url 路径变量

[英]django rest framework: Get url path variable in a view

我必须将product_id (这是一个字符串)传递到视图中。 在那里我必须根据产品 ID 进行一些数据库操作。 如何在该视图中获取该产品 ID? 实际上, ProductDetailConfiguration类视图中的参数应该是什么? 现在我正在传递viewsets.ModelViewSet 实际上,这个 API 调用并不与任何模型完全相关。

# urls.py

  url(r'^product-configuration/(?P<product_id>[\w-]+)/$', views.ProductDetailConfiguration, name='product-configuration'),

# 视图.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

URL 参数在self.kwargs中可用。
文档

根据 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)

您必须在视图中使用lookup_field来获取product_id并且该视图不应属于任何模型。 在这里,我已经使用 django rest 框架按名称返回信息来回答像您这样的问题

希望这将有助于解决您的问题。

这是我的方法:

更新网址:

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

您可以通过以下方式从请求 url 中获取数据:- data_dict = self.request.data这将返回请求 url 的所有参数的字典。 您可以使用参数名称作为键

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM