给定以下代码:
randomItemQS = Item.objects.filter().exclude(id__in=[o.id for o in collection]).order_by('?')
randomItem = randomItemQS[:1]
calculation = randomItem.method() / constant
我该如何确保randomItem
是一个Item
而不是一个QuerySet?
如果我在manage.py shell
中运行代码,则会得到预期的结果。但是,从视图运行此代码会导致AttributeError'QuerySet' object has no attribute 'method'
,并指示错误发生在最后一行。
我错过了什么吗?
编辑:抱歉,我应该更具体一些——我在shell中可以正常工作,但在视图中无法正常工作。有什么不同吗?
collection
本身就是一个queryset,那么你应该直接使用exclude(id__in=collection)
,它使用子查询并且无需单独评估collection
。 - Daniel Rosemancollection
是一个列表,感谢反馈。 - Matthew Calabresi