【发布时间】:2020-03-28 21:16:34
【问题描述】:
我有个需求,就是从客户端我会得到一个对象数组,里面有字段名、过滤条件和过滤值这样的。
对象数组示例:
[
{field_name: "book_name", filter_condition: "contains", filter_value: "some book name"},
{field_name: "book_category", filter_condition: "not_equal", filter_value: "category value"},
{field_name: "book_author", filter_condition: "starts_with", filter_value: "authoer name"},
{field_name: "book_price", filter_condition: "equal", filter_value: 100}
]
我必须根据上述所有条件进行过滤。考虑我有一个名为 Book 的模型和对象数组中的字段(即 book_name、book_category、book_author、book_price)。对于 filter_condition,我编写了一个比较 filter_condition 并分配 Django 查询集 API 的函数。例如。
def assign_filter_condition(self, request, filter_condition, field_name, filter_value):
if filter_condition == "contains":
kwargs = {
'{0}__icontains'.format(field_name): filter_value
}
return kwargs
...
这里我不知道如何为 exclude 和 NOT 查询应用条件。
我真的不明白如何为此编写逻辑。谁能帮忙解释一下逻辑。
提前谢谢你。
【问题讨论】:
-
我不知道您的使用案例或您的工作条件,但您至少应该有理由拒绝使用 Django-filter django-filter.readthedocs.io/en/master/index.html
-
@nigel222 我在问题中提到的上述对象数组示例,就像我将向 DRF 发送请求一样。因为您可以看到过滤条件和字段名称会发生变化。所以我不知道如何解决它或在后端编写逻辑。
-
好的,Django-filter 可能不是适合您使用的工具 (DRF)。希望评论会通知到达这里搜索“动态过滤器”或类似内容的人。
标签: django django-rest-framework django-orm django-filter