django rest framework:在视图中获取url path变量

时间:2017-04-19 06:45:42

标签: python django django-models django-views django-rest-framework

我必须将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

4 个答案:

答案 0 :(得分:2)

您必须在视图中使用lookup_field才能获得product_id,并且该视图不应属于任何模型。在这里,我已经回答了像你这样的问题using django rest framework to return info by name

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

答案 1 :(得分:1)

URL参数在self.kwargs中可用。
来自the documentation

  

根据网址进行过滤

     

另一种过滤方式可能涉及基于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)

答案 2 :(得分:0)

这是我的方法:

更新网址:

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

答案 3 :(得分:-1)

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