在 Django 模型过滤中用变量替换关键字参数

Replace Keyword Argument With Variable in Django Model Filtering

我正在根据用户在输入表单中提供的数据对 django 模型执行过滤。我不想对值进行硬编码,因此我希望遍历 request.POST 中的整个查询参数,然后按键和值进行过滤。

这是我的代码示例

class QueryView(View):
    def post(self, request, *args, **kwargs):
        params = request.POST
        if params:
            for key in params:
                queryset = MyModel.objects.filter(key=params[key])
        return MyResponse

我无法让事情正常工作,因为 key 必须是 MyModel 中的一个字段,有没有更好的方法来实现同样的目标。

您可以将它们作为字典传递:

queryset = MyModel.objects.filter(**{field_name: v1, another_field_name: v2})

您可以访问 POST 字段和值,因为 request.POST.items() 它会 return 一个键值对,因此您可以做一些事情像这样

class QueryView(View):
    def post(self, request, *args, **kwargs):
        params = request.POST
        if params:
            for key, value in params.items():
                # key is the field and value is it's value
                # now you can filter as you wish
                queryset = MyModel.objects.filter(key=value)
        return MyResponse