列表视图中的搜索功能

Search functionality in list view

我正在尝试在我的 CBV 列表视图中实现搜索功能。为此,我写了一个“get_queryset”。视图看起来像这样

class List(ListView):
model = Client
...

def get_queryset(self, *args, **kwargs):
    qs = super().get_queryset(*args, **kwargs)
    query = self.request.GET.get('q')
    if query:
        return qs.get(user=query)
    return qs

当我这样设置时,出现以下错误: “字段 'id' 需要一个数字,但得到了 'x'。”。在这种情况下,x 是我在搜索字段中输入的任何内容。

但是如果我将用户更改为无效的用户,我会收到以下错误: “无法将关键字“”解析为字段。选择是:用户,user_id”。

我不明白为什么用户在这种情况下不起作用,以及为什么如果我指定用户它会使用字段“id”。

当您在查询集查找中使用关系字段而不指定查找类型 (exact/iexact/icontains,etc.) 时,它假定您正在按精确查询。

精确关系查找允许实例,但也会尝试使用您的参数作为 ID。

看来你的用户id类型是number/integer,所以你必须强制'query'为整数。

如果您想查询用户名之类的内容,请尝试 qs.filter(user__username__icontains=query)