【问题标题】:too many values to unpack [Django]太多的值无法解包 [Django]
【发布时间】:2015-08-04 17:16:08
【问题描述】:
def index(request):
    expiring_list = probe.objects.filter("isExpired=True")
    output = ', '.join([p.serial for p in expiring_list])
    return HttpResponse(output)

isExpired 是一个布尔函数。我应该如何修改过滤器以使过滤器不会引发ValueError

【问题讨论】:

    标签: python django


    【解决方案1】:

    您以错误的格式进行查询。

    您的查询应采用以下形式:

    expiring_list = probe.objects.filter(isExpired = True)
    

    这是您需要进行的查询,以防 isExpired 是您的模型字段。但是既然你说它是一个函数,假设这个函数在类中,你需要通过以下方式获取所有对象:

    expiring_list = []
    
    objects = probe.objects.all()
    
    for obj in objects:
        if obj.isExpired() == True:
            expiring_list.append(obj)
    

    expiring_list 现在将包含模型探测器的所有对象,其中isExpired 函数返回True

    【讨论】:

    • IsExpired 是一个使用过期日期字段输出布尔值的函数,所以我不能将其用作普通字段
    • isExpired 是你类中的一个函数吗?并且 expiry_date 是模型中的一个字段。如果是这种情况,那么您需要以下内容: objects = probe.objects.all() for obj in objects: if
    • 如果isExpired是一个函数,验证应该是这样的:if obj.isExpired():
    • @Arpit Goyal 我不得不稍微修改一下代码,使它看起来像这样: if obj.isExpired()==True: 基本上主要区别在于 isExpired 之后的参数括号
    • 是的,我很抱歉。好吧,这是一个诚实的错误:P
    【解决方案2】:

    我认为 isExpired 不是您模型中的字段,参考您之前的问题Refresh a field from another table [Django]

    我认为 exp_date 是您要查找的字段。

    试试这个:

    import datetime
    
    def index(request):
       expiring_list = probe.objects.filter(exp_date__lt=datetime.date.today())
       output = ', '.join([p.serial for p in expiring_list])
       return HttpResponse(output)
    

    【讨论】:

    • 这里的问题是我不知道如何调用函数,但感谢这种替代方法:)
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2012-02-15
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多