python - 如何从 url 获取可选参数并使用它们来解析模型中的对象?
问题描述
例如,从 url:https://localhost:8000/parameters=param1¶m2¶m3
如何将参数解析为列表并将其传递到基于类的视图中?
网址.py
urlpatterns = [
path('admin/', admin.site.urls),
path('parameters=...', MyListView.as_view()),
]
视图.py
class MyListView(generics.ListAPIView):
queryset = MyObject.objects.all() # Use the parameters to filter out objects
serializer_class = MyObjectSerializer
模型.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)
我想查询包含所有给定参数的对象列表。另外,这是我的模型的逻辑结构吗?
解决方案
最初,您不需要做任何事情来处理函数中的查询参数--(Wiki)path(...)
。
因此,将您的 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/some/path/?parameter_name=foo¶meter_name=bar
我强烈建议django-filter
为此使用成熟的软件包
推荐阅读
- r - 有条件地粘贴来自 R 中不同列的值(忽略 NA)
- npm - 如何确定是否应将 deps 放入“devDependencies”或“peerDependencies”
- scala - 迁移到 Scala3 后范围基准测试缓慢
- python - 使用 PyAudio 读取流时,每 1024 字节(微)帧后减少 1 毫秒的延迟
- python - 熊猫时差计算列不更新
- python - 重新绑定可迭代导致 UnbindLocalError (?)
- asynchronous - 在 Blazor Webassembly 中初始化服务
- java - aws camunda zeebe ClientStatusException:超过 19.999991631 秒后的最后期限
- reactjs - 如果数据不是未定义的,你怎么能映射?
- javascript - 函数返回未捕获的引用错误