【问题标题】:How to get optional parameters from a url and use them to parse objects from a model?如何从 url 获取可选参数并使用它们来解析模型中的对象?
【发布时间】:2021-03-15 01:46:47
【问题描述】:

例如,来自 url:https://localhost:8000/parameters=param1&param2&param3

如何将参数解析为列表并将其传递到基于类的视图中?

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('parameters=...', MyListView.as_view()),
]

views.py

class MyListView(generics.ListAPIView):
    queryset = MyObject.objects.all() # Use the parameters to filter out objects
    serializer_class = MyObjectSerializer

models.py

class MyObject(models.Model):
    object_id = models.CharField(max_length=10)
    content = models.CharField(max_length=120)


# Each object can have an unlimited number of parameters
class ObjectParameters(models.Model):
    my_object = models.ForeignKey(MyObject, on_delete=models.CASCADE)
    param = models.CharField(max_length=120)

我想查询包含所有给定参数的对象列表。另外,这是我的模型的逻辑结构吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    最初,您不需要做任何事情来处理path(...) 函数中的query parameters--(Wiki)

    所以把你的 urls.py 改成

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('some/path/', MyListView.as_view()),
    ]

    然后,在您看来,将 get_queryset(...) 方法重写为

    class MyListView(generics.ListAPIView):
        serializer_class = MyObjectSerializer
    
        def get_queryset(self):
            queryset = MyObject.objects.all()
            param = self.request.query_params.get("parameter_name")
            if param:
                queryset = queryset.filter(some_model_field=param)
            return queryset

    所以,现在,DRF 视图期望表单中的查询参数,

    https://localhost:8000/<b>some/path/?parameter_name=foo&amp;parameter_name=bar</b>

    我强烈建议为此使用成熟的 django-filter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多