【问题标题】:Django Filter only getting the last itemDjango过滤器只获取最后一项
【发布时间】:2018-11-15 23:06:44
【问题描述】:

我制作了下面的代码,我想从变量为“item”的复选框值中过滤选定的 id,并且我还想获​​取变量为“pfast_type”的列。 问题是我只得到最后一项。我没有得到整个列表。我在哪里做错了?

elif pfast_type and item:
object_list = FP.objects.filter(pk__in=[item]).values('FP_Item',pfast_type)

【问题讨论】:

  • item 变量的类型是什么?如果是数组,那么.filter(pk__in=[item]) 应该是.filter(pk__in=item)
  • item 值类似于 371 372 373 等。并且有多个值。
  • 在侧节点上,item变量名有误导性,如果你有多个元素,那么它应该是items
  • 这是否意味着item 实际上是一个字符串或什么? type(item) 输出是什么?
  • 你是对的 :) 我这样命名变量,但它也可以是一个变量或多个变量。我从选定的复选框中获取这些值

标签: django list filter


【解决方案1】:

After a short investigation in chat, we found out the cause:

问题是item 变量是通过:request.GET.get("fastedit") 解决的。最初的意图是将多个值传递给fastedit查询参数。但是,request.GET.get 只返回最后一个。

为了解决这个问题,我们需要使用request.GET.getlist("fastedit") 并将解析列表直接传递给filter(pk__in=item),而不像原始代码filter(pk__in=[item]) 那样包装在额外的列表中

【讨论】:

    【解决方案2】:

    我不知道item 中有什么,但[item] 是一个长度为1 的列表。所以pk__in=[item] 只能匹配一个主键,如果有的话。

    匹配过滤器的FP对象只能有0个或1个,全部返回。

    【讨论】:

    • 感谢您的评论,但据我所知,如果您像这样使用 [],item 是一个列表。所以 item 基本上有 371,372,373 等值......
    • 也可以这样使用 # 获取 id 为 1、4 和 7 的博客条目 >>> Blog.objects.filter(pk__in=[1,4,7]) 根据@987654321 @
    • 但是[1,4,7]和["1,4,7"]不一样。 item 是什么对象?一个字符串?
    • true 我明白你的意思,它不是字符串。我需要的数字,例如 [370,371,372] - 基本上我想检索 id 的 371 372 和 373
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2020-11-30
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多